SQL probléma
Sziasztok!
Egy olyan problémám lenne, hogy az egyik SQL kérésem rossz eredményt ad vissza. Egy sima blogmotorhoz van, bejegyzés lekérése történik meg benne tag-ekkel, kommentek számával. Egész konkrétan a kommentek száma rossz, mindig beszorzódik a tag-ek számával.Eddig nem nagyon használtam ilyen bonyolult kéréseket, csak nagyon egyszerűeket, ezt a GROUP_CONCAT-ot is itt láttam valahol.
Azt találtam ki, hogy a COUNT()-os részt leosztom valamivel, de az szerintem nagyon nemszép. Biztos van rá megoldás.
Szerkezet:
entry
-id
-title
-author
-public
-allowComments
-date
-preview
-content
comment
-id
-author
-date
-email
-site
-content
-ip
tag
-id
-name
tag_relationship
-eid //entry.id
-tid //tag.id
■ Egy olyan problémám lenne, hogy az egyik SQL kérésem rossz eredményt ad vissza. Egy sima blogmotorhoz van, bejegyzés lekérése történik meg benne tag-ekkel, kommentek számával. Egész konkrétan a kommentek száma rossz, mindig beszorzódik a tag-ek számával.
SELECT entry.id, title, entry.author, public, allowComments, entry.date, content, preview,
GROUP_CONCAT(tag.name ORDER BY tag.name) AS tnames,
COUNT(comment.id) AS comments
FROM entry
LEFT JOIN tag_relationship ON tag_relationship.eid=entry.id
LEFT JOIN tag ON tag.id=tag_relationship.tid
LEFT JOIN comment ON comment.id=entry.id
GROUP BY entry.id
Azt találtam ki, hogy a COUNT()-os részt leosztom valamivel, de az szerintem nagyon nemszép. Biztos van rá megoldás.
Szerkezet:
entry
-id
-title
-author
-public
-allowComments
-date
-preview
-content
comment
-id
-author
-date
-site
-content
-ip
tag
-id
-name
tag_relationship
-eid //entry.id
-tid //tag.id
sql
entry1 - tag1 - comment1
entry1 - tag1 - comment2
entry1 - tag1 - comment3
entry1 - tag2 - comment1
entry1 - tag2 - comment2
entry1 - tag2 - comment3
mivel ezt után a bejegyzés azonosító alapján csoportosítod, egyértelmű, hogy a count nem azt az eredményt fogja visszaadni amit vársz.
Köszönöm
A kód működik amúgy, kösz!
Nem is tudtam, hogy lehet ilyen összetett LEFT JOIN-okat csinálni. Látszik, hogy van még mit tanulnom.
Thx
nem akartam
átmeneti megoldásnak jó lehet, de szerintem rossz berögződéshez vezet.
egyébként mi volt a három lekérdezés? a kommentek számát is külön vetted?
Igen ...
???
Igen ...
Hogyan lehet ezt egy lekérdezésben megoldni (le kell kérni a tag-et és az escape-elt változatát – name, escaped_name oszlop) group_concat nélkül? Van tags és tag_relationship tábla.
Update:
Egy ilyen query-t ötlöttem ki:
észrevételek
Nincs értelme itt left joint használni.
Szintén nincs jelentősége, hogy post_id szerint rendezz, ebben a megoldásban is simán végig tudsz menni enélkül is az eredményhalmazon, és bepakolni a tageket a megfelelő cikkhez.
Én ezt használnám:
Re
Például:
Tag: "új szolgáltatás"
URL-ben : "uj-szolgaltatas"
A query, amit írtál csak akkor fut le, ha beírom ezt a where helyett:
having nem kell
Aha, akkor lehet ez:
Remek
sorrend
hogy érdemes akkor?