Rolf B: mySQL Bei Suche über mehrer Spalten auch den Feldnamen des Treffer ausgeben

Beitrag lesen

Hallo LastBoyScout,

ich hätte zwei Alternativen.

(1) Verwende UNION ALL statt OR:

  SELECT tabelle.*, 'PHONE' as fundstelle
  FROM tabelle
  WHERE PHONE LIKE '$search' 
UNION ALL
  SELECT tabelle.*, 'MOBILE' as fundstelle
  FROM tabelle 
  WHERE MOBILE LIKE '$search' 
UNION ALL
  SELECT tabelle.*, 'FAX' as fundstelle
  FROM tabelle 
  WHERE FAX LIKE '$search'

(2) Ermittle die Fundstelle über einen CASE-Ausdruck.

SELECT tabelle.*, 
       CASE WHEN PHONE  LIKE '$search' THEN 'PHONE'
            WHEN MOBILE LIKE '$search' THEN 'MOBILE'
            WHEN FAX    LIKE '$search' THEN 'FAX' END as fundStelle
FROM tabelle
WHERE PHONE LIKE '$search' OR MOBILE LIKE '$search' OR FAX LIKE '$search'

Schön ist beides nicht. In der ersten Variante rennst Du 3x durch die Tabelle, in der zweiten Variante prüfst Du alles doppelt. Vermutlich ist die 2. Variante schneller.

Ich überlege gerade noch ob man eine Cursorschleife sinnvoll einsetzen kann, aber das dürfte unter dem Strich am mühsamsten und langsamsten sein.

Dass Du beim befüllen der Variablen $search an's Escapen denken musst, schreibe ich mal rein pro forma unten drunter 😉

Rolf

--
sumpsi - posui - obstruxi