Autor | Zpráva | ||
---|---|---|---|
piiiiiiiip Profil |
#1 · Zasláno: 18. 3. 2023, 17:59:24
Ahoj,
snažím se vytvořit funkci k vyhledávání článků podle tagů. Samotné vyhledávání funguje přesně tak jak má, bohužel se mi k tomu ale nedaří implementovat stránkování. Problém je v tom že nedokážu spočítat záznamy v db, která obsahují všechny zvolené tagy. Zde je kod, kterým se snažím o spočítání těch záznamů: return $this->database->fetchField(" SELECT COUNT(*) FROM articles c INNER JOIN article_mapping m ON c.id = m.article_id INNER JOIN article_tags t ON m.tag_id = t.id HAVING COUNT(CASE WHEN t.tag_title IN ('".$sanitizedTags."') THEN 1 END) = " . count($tags) . " "); } |
||
Kajman Profil |
#2 · Zasláno: 18. 3. 2023, 19:27:32
Pro ladění je dobré vypsat si konečný sestavený dotaz i případnou chybovou hlášku. Tady asi dotaz proběhne, ale žádný řádek nevyhoví podmínce having. Pokud se totiž nepoužije group by, agregují se úplně všechny řádky a je jen pár situací, kdy ten count(case) vyjde na všechny kombinace všech článků.
Nejjednoduší bude spočítat počet řádků z poddotazu. Tedy by mělo jít něco jako SELECT Count(*) FROM (SELECT m.article_id FROM article_mapping m INNER JOIN article_tags t ON m.tag_id = t.id WHERE t.tag_title IN ('a', 'b', 'c') GROUP BY m.article_id HAVING Count(*) = 3) a |
||
piiiiiiiip Profil |
#3 · Zasláno: 18. 3. 2023, 20:37:49
Aha, já to totiš s GROUP BY zkoušel a rovněž mi to vracelo špatný výsledek. Po rychlém otestování to vypadá že vaše řešení funguje.
Děkuji za radu, na ty poddotazy jsem dotet nenarazil. :-) |
||
Časová prodleva: 2 roky
|
0