Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zwrocenie nazwy kolumny z ktora nastąpilo dopasowanie
koszi
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


Witam, mam taki problemik: musze wyszukac produkty po dowolnej frazie, która bedzie pasowała do róznych kolumn tabeli produktu oprócz tego rownież w takich, które znajduja sie w innych tabelach niz ta glowna z produktem. I to w zasadznie nie stanowi problemu, ale potrzebuje również dowiedzieć sie z która kolumna nastąpiło dopasowanie i tego juz nie potrafie ugryźc (IMG:style_emoticons/default/sad.gif)




SELECT
  distinct(p.name),p.alt_name,a.first_last_name,t.name as trademark_name
FROM
    store__products p
    LEFT JOIN store__products_authors pa ON p.id = pa.product_id
    LEFT JOIN store__product_authors a ON a.id = pa.author_id
    LEFT JOIN store__trademarks t ON t.id = p.trademark_id
WHERE
   p.name ILIKE '$q' 
   OR p.alt_name ILIKE '$q'
   OR a.first_last_name ILIKE '$q'
   OR t.name ILIKE '$q'
LIMIT 10";


Czy da sie jakos tak zbudowac zapytaniem bym wiedzial ze dopsowane zostało pole 'name' czy tez 'first_last_name' czy tez dowolne inne? 

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wlatanowicz
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.10.2009

Ostrzeżenie: (0%)
-----


Najprościej użyć CASE WHEN:

  1. SELECT
  2. DISTINCT(p.name),p.alt_name,a.first_last_name,t.name AS trademark_name,
  3. CASE
  4. WHEN p.name ILIKE '$q'
  5. THEN
  6. 'name'
  7. WHEN p.alt_name ILIKE '$q'
  8. THEN
  9. 'alt_name'
  10. ELSE
  11. 'gdzies indziej'
  12. END AS tu_znalazlem
  13. FROM
  14. (ciach)


Nie wiem tylko jak z wydajnością - taki sam ILIKE będzie chyba wykonany dla każdej krotki z tabeli dwukrotnie - raz w projekcji, drugi raz w warunku - ale mogę się mylić.

Możesz również CASE..WHEN dokleic do zapytania ktore pobiera dane z Twojego pierwotnego zapytania, będącego podzapytaniem - w miejsce (ciach) wkładasz całe Twoje zapytanie razem z LIMIT - wtedy masz pewność, że ILIKE z CASE..WHEN będzie wykonany tylko dla wybranych wcześniej krotek.

pozdrawiam,
Wiktor
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 02:46