Mit GROUP_CONCAT in der Abfrage werden nicht die richtigen Ergebnisse erzielt

mvasco

Ich habe 7 Tabellen, mit denen ich in einer Abfrage arbeiten kann:

tb_post, tb_spots, users, td_sports, tb_spot_types, tb_users_sports, tb_post_media

Dies ist die Abfrage, die ich verwende:

SELECT po.id_post AS id_post, 
po.description_post as description_post,
 sp.id_spot as id_spot, 
po.date_post as date_post,
 u.id AS userid, 
u.user_type As tipousuario, 
u.username AS username, 
spo.id_sport AS sportid, 
spo.sport_icon as sporticon, 
st.logo_spot_type as spottypelogo, 
sp.city_spot AS city_spot, 
sp.country_spot AS country_spot, 
sp.latitud_spot as latitudspot,
 sp.longitud_spot as longitudspot,
 sp.short_name AS spotshortname, 
sp.verified_spot AS spotverificado, 
 u.profile_image AS profile_image,
sp.verified_spot_by as spotverificadopor,
 uv.id AS spotverificador,
 uv.user_type AS spotverificadornivel,
 pm.media_type AS mediatype,
 pm.media_file AS mediafile,

GROUP_CONCAT(tus.user_sport_sport) sportsdelusuario,
GROUP_CONCAT(logosp.sport_icon) sportsdelusuariologos,
GROUP_CONCAT(pm.media_file) mediapost,
GROUP_CONCAT(pm.media_type) mediaposttype

FROM tb_posts po 

LEFT JOIN tb_spots sp ON po.spot_post = sp.id_spot 
LEFT JOIN users u ON po.uploaded_by_post = u.id 
LEFT JOIN tb_sports spo ON sp.sport_spot = spo.id_sport
LEFT JOIN tb_spot_types st ON sp.type_spot = st.id_spot_type
LEFT JOIN users uv ON sp.verified_spot_by = uv.id
LEFT JOIN tb_users_sports tus ON tus.user_sport_user = u.id
LEFT JOIN tb_sports logosp ON logosp.id_sport = tus.user_sport_sport
LEFT JOIN tb_post_media pm  ON pm.media_post = po.id_post 

WHERE po.status = 1
GROUP BY po.id_post,uv.id

Ich habe Probleme mit einigen der GROUP_CONCAT-Gruppen:

GROUP_CONCAT(tus.user_sport_sport) sportsdelusuario gibt mir die richtigen Gegenstände aber wiederholt, alle Gegenstände zweimal

GROUP_CONCAT(logosp.sport_icon) sportsdelusuariologos gibt mir die richtigen Gegenstände aber wiederholt, alle Gegenstände zweimal

GROUP_CONCAT(pm.media_file) mediapost gibt mir die richtigen Gegenstände, wird aber viermal wiederholt

GROUP_CONCAT(pm.media_type) mediaposttype s gibt mir die richtigen Gegenstände, aber wiederholt viermal

Ich kann hier alle Tabellenstrukturen einfügen, wenn Sie sie brauchen.

Uueerdo

Mehrere Eins-zu-Viele-Beziehungen, die in einer Abfrage verknüpft sind, wirken sich multiplikativ auf die Aggregationsergebnisse aus. Die Standardlösung sind Unterabfragen:

Du kannst ändern

GROUP_CONCAT(pm.media_type) mediaposttype
...
LEFT JOIN tb_post_media pm  ON pm.media_post = po.id_post 

zu

pm.mediaposttype
...
LEFT JOIN (
   SELECT media_post, GROUP_CONCAT(media_type) AS mediaposttype 
   FROM tb_post_media 
   GROUP BY media_post
) AS pm ON pm.media_post = po.id_post 

Wenn tb_post_media sehr groß ist und die po.status = 1Bedingung in der äußeren Abfrage die Ergebnisse der Unterabfrage erheblich reduzieren würde, kann es sich lohnen, den ursprünglichen Join innerhalb der Unterabfrage zu replizieren, um die Ergebnisse herauszufiltern.

In ähnlicher Weise kann die in den Kommentaren erwähnte korrelierte Version auch leistungsfähiger sein, wenn die äußere Abfrage relativ wenige Ergebnisse aufweist. (Die Berechnung von GROUP_CONCAT () für jedes einzelne kann weniger kosten als die einmalige Berechnung für alle, wenn Sie nur sehr wenige der Ergebnisse des letzteren verwenden würden.)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Got TypeError: Die Eigenschaft 'passt' von undefined kann mit Cypress beim Generieren eines mochawesome Berichts nicht gelesen werden

分類Dev

Website mit Formular mit rvest kann nicht abgekratzt werden

分類Dev

GROUP_CONCAT ORDER BY

分類Dev

例GROUP_CONCAT

分類Dev

group by and group_concat alternative

分類Dev

If condition with group_concat in mysql

分類Dev

Limit concatenatings in group_concat

分類Dev

SQLiteのGROUP_CONCAT

分類Dev

sql group_concat fizzle

分類Dev

GROUP_CONCAT DISTINCT BY ID

分類Dev

Warum werden AngularJS-Fehler im HTML-Code nicht in der Konsole angezeigt?

分類Dev

Ich brauche einen Teil der Seite, um dynamisch mit Ajax geändert zu werden

分類Dev

GROUP_CONCATの実装方法

分類Dev

group_concat result not work in IN condition

分類Dev

group_concatの順序

分類Dev

GROUP_CONCAT gives incorrect values

分類Dev

MySQL SELECT GROUP_CONCAT AND SUM

分類Dev

GROUP_CONCAT内のMySQLCOUNT

分類Dev

count in group_concat in mysql in one query

分類Dev

How to avoid duplication in GROUP_CONCAT?

分類Dev

SQL GROUP_CONCAT split in different columns

分類Dev

MySQL group_concat on groups listings

分類Dev

GROUP_CONCAT with ordering and missing fields

分類Dev

Searching through the GROUP_CONCAT values in MYSQLI?

分類Dev

group_concatからの使用

分類Dev

2列のGROUP_CONCAT

分類Dev

PostgreSQL - JSONB 列の GROUP_CONCAT

分類Dev

重複するGroup_Concat

分類Dev

Ich möchte eine Abfrage als JSON-Objekt speichern. (Fehler: Die FOR JSON-Klausel ist in einer SELECT INTO-Anweisung nicht zulässig.)