Autor Zpráva
kohl
Profil
Dobrý den,
potřebuji poradit ohledně výpisu, vyhledávám v tabulce category ,kde mám uložené tagy, problém je v tom, že
když vyhledávám např. pomoci písmena "s" zobrazí se jen ty tagy které jím začínají.

25 798/85 - Science fiction
440/10 - Sport

a já bych chtěl, aby to vypsalo všechny tagy, které patří k pořadovému číslu.

25 798/85 - Science fiction, Detektivky, Beletrie
440/10 - Sport, Mládež


Tabulky a sloupce:
duplicate - duplicate_id, duplicate_incrementalnumber
map_category - map_category_id, map_category_duplicite, map_category_category
category - category_id, category_title

Jestli je schéma špatně řešeno, poraďte mi prosím jiné.

Výpis mám takhle:

SELECT duplicate_incrementalnumber, GROUP_CONCAT( DISTINCT category_title ) AS alltags
FROM DUPLICATE 
INNER JOIN map_category ON duplicate.duplicate_id = map_category.map_category_duplicite
INNER JOIN category ON map_category.map_category_category = category.category_id
WHERE MATCH (category_title) AGAINST ('s*' IN BOOLEAN MODE)
GROUP BY duplicate.duplicate_id

Děkuji předem za radu.
Kajman
Profil
Asi něco jako
SELECT duplicate_incrementalnumber,
       GROUP_CONCAT(DISTINCT category.category_title) AS alltags
FROM   DUPLICATE
INNER  JOIN map_category
ON     duplicate.duplicate_id = map_category.map_category_duplicite
INNER  JOIN category
ON     map_category.map_category_category = category.category_id
LEFT   JOIN category c2
ON     category.category_id = c2.category_id
       AND MATCH(category_title) AGAINST('s*' IN BOOLEAN MODE)
GROUP  BY duplicate.duplicate_id
HAVING count(c2.category_id) > 1

Případně
SELECT duplicate_incrementalnumber,
       GROUP_CONCAT(DISTINCT category_title) AS alltags
FROM   DUPLICATE
INNER  JOIN map_category
ON     duplicate.duplicate_id = map_category.map_category_duplicite
INNER  JOIN category
ON     map_category.map_category_category = category.category_id
INNER  JOIN (SELECT distinct mc.map_category_duplicite
             FROM   map_category mc
             INNER  JOIN category c
             ON     mc.map_category_category = c.category_id
             WHERE  MATCH(c.category_title) AGAINST('s*' IN BOOLEAN MODE)) m
ON     map_category.map_category_duplicite = m.map_category_duplicite
GROUP  BY duplicate.duplicate_id

Těžko říct, co bude svižnější.
kohl
Profil
Děkuji, použil jsem ten první, byl dva krát rychlejší, jen jsem ho upravit na

SELECT duplicate_incrementalnumber,
       GROUP_CONCAT(DISTINCT category.category_title) AS alltags
FROM   DUPLICATE
INNER  JOIN map_category
ON     duplicate.duplicate_id = map_category.map_category_duplicite
INNER  JOIN category
ON     map_category.map_category_category = category.category_id
LEFT   JOIN category c2
ON     category.category_id = c2.category_id
       AND MATCH(c2.category_title) AGAINST('s*' IN BOOLEAN MODE)
GROUP  BY duplicate.duplicate_id
HAVING count(c2.category_id) > 0

Ještě jednou děkuji za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: