Autor Zpráva
freeTel
Profil *
Zdravím, mám snad již poslední dotaz. chci vyhledat produkty i bez diakritiky, ale řadit je podle zadaného slova. Pokud se vypíše šíp, tak nejdří to seřadí podle šíp a potom sip. Zase hodiny experimentuji a pořád v bludným kruhu. Věřím, že konstrukci mám správnou a jen mi něco malého utíká. Děkuji

$dotaz = "SELECT count(id) as kolik,id,nazev FROM produkty WHERE LOWER(nazev) LIKE '%".$slovo."%' HAVING (kolik=0 AND LOWER(nazev) LIKE '%".$slovo."%' COLLATE utf8_general_ci) GROUP BY nazev COLLATE utf8_czech_ci ASC LIMIT 7";



ještě dodatek ať jsem přesnější: to samé i obráceně při výpisu sip nejdříve sip a potom šíp
Kajman
Profil
Použijte union.
freeTel
Profil *
To jsem už zkoušel a výsledek je stejný. Pořád to neřadí prioritně podle zadaného slova uživatele.

$dotaz = "SELECT id,nazev FROM produkty WHERE LOWER(nazev) LIKE '%".$slovo."%'
UNION
SELECT id,nazev FROM produkty WHERE LOWER(nazev) LIKE '%".$slovo."%' COLLATE utf8_general_ci ORDER BY nazev COLLATE utf8_czech_ci ASC, nazev COLLATE utf8_general_ci ASC";
Kajman
Profil
Např. si můžete přidat sloupec značící ve kterém dotazu se řádek našel a podle něho řadit. Pro možnost duplikátů je tam přidáno group by.
SELECT id, nazev FROM
(SELECT id,nazev, 1 zdroj FROM produkty WHERE LOWER(nazev) LIKE '%".$slovo."%'
 UNION
 SELECT id,nazev, 2 zdroj FROM produkty WHERE LOWER(nazev) LIKE '%".$slovo."%' COLLATE utf8_general_ci
) x
GROUP BY id, nazev
ORDER BY min(zdroj)
freeTel
Profil *
Tak tenhle dotaz by jsem dohromady nedal. Funguje to dobře, ale na tohle je důležitý mít víc důvtip jak znalosti a vy máte obojí. Vždy mi dobře poradíte, Děkuji a přeji hezký víkend

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:

0