Diskuze: Řazení podle pořadí where or
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
To co popisujes tak jak to popisujes samozrejme nejde. Takhle vyhledas ty zaznamy, ktere vyhovi podmince bez ohledu na nejakou prioritu. Reseni by mohlo byt vyhledavat vsude (upravena varianta toho co mas hodove) jen by sis musel vracet identifikator toho kde jsi to nasel ... tedy neco na zpusob:
SELECT FIRST 1 ID, PRIORITA
FROM
(
SELECT ID, 1 AS PRIORITA FROM table
WHERE title LIKE "%text%"
UNION ALL
SELECT ID, 2 AS PRIORITA FROM table
WHERE description LIKE "%text%"
UNION ALL
SELECT ID, 3 AS PRIORITA FROM table
WHERE contact LIKE "%text%"
)
ORDER BY PRIORITA
Tim by jsi nasel prvni zaznam podle priority ze vsech jednotlivych hledani. Vymyslet pujdou ale i jine, optimalizovanejsi reseni, tohle me napadlo na "prvni dobrou".
Super, díky moc! Funguje dle očekávání.
Můj výsledný kód vypadá tedy takto:
SELECT *
FROM
(
SELECT *, 1 AS PRIORITA FROM table
WHERE title LIKE "%text%"
UNION ALL
SELECT *, 2 AS PRIORITA FROM table
WHERE description LIKE "%text%"
UNION ALL
SELECT *, 3 AS PRIORITA FROM table
WHERE contact LIKE "%text%"
) AS x
ORDER BY PRIORITA
-- ja bych tam dal
SELECT *, `title` AS `match`, 1 AS `priorita`
-- a nakonec dal
ORDER BY `priorita` ASC, `match` ASC
Jakoze to ma radit podle nalezeneho slova.
Pokud v některém záznamu bude hledaný text ve více sloupcích, pak budeš mít ve výsledcích tento záznam několikrát.
Ten Case muzes nacpat i primo do orderby, takze nemusis mit subquery
Zobrazeno 7 zpráv z 7.