2012-06-21 3 views
1

OK, je travaille avec cela depuis un certain temps et je suis un peu coincé.mysql ordre de requête par correspondance exacte avec plusieurs clauses LIKE

Peut-être que j'y vais tout faux!

Fondamentalement, j'ai une requête pour un champ de recherche. L'idée générale est de sélectionner le résultat basé sur LIKE %% tout en mettant les correspondances exactes en premier. Donc, par exemple, si vous cherchez 47 je veux tout avec 47 dans id, nom, ou nom de société pour montrer, mais le résultat avec le numéro d'identification 47 devrait être sur le dessus et la même chose si j'ai tapé un nom de famille.

S'il vous plaît voir mon code ci-dessous, il peut aider à clarifier ma question.

SELECT id, 
IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name, 
first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter, 
islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer 
FROM clients 
WHERE id LIKE '$search' OR surname LIKE '$search' OR company_name LIKE '$search' 
union all 
SELECT id, 
IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name,  
first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter,  
islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer 
FROM clients 
WHERE id LIKE '%$search%' AND id NOT LIKE '$search' OR surname LIKE '%$search%' 
and SURNAME NOT LIKE '$search' OR company_name LIKE '%$search%' 
and company_name NOT LIKE '$search' 
LIMIT $start, $limit"; 

`

Répondre

3

Essayez ceci:

(sélectionnez correspondance exacte) union tout avec (choisir correspondance partielle en omettant de correspondance exacte)

Exemple:

(
    SELECT 
     id, 
     IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name, 
     first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter, 
     islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer 
    FROM 
     clients 
    WHERE 
     id LIKE '$search' OR 
     surname LIKE '$search' OR 
     company_name LIKE '$search' 
) 
union all 
(
    SELECT 
     id, 
     IF(company_name IS NOT NULL AND company_name <> '', company_name, surname) AS name, 
     first_name, country, phone1, isowner, isholidayrenter, isproholidayrenter, 
     islongtermrenter, isprolongtermrenter, isprobuyer, isbuyer 
    FROM 
     clients 
    WHERE 
     (id LIKE '%$search%' AND id NOT LIKE '$search') OR 
     (surname LIKE '%$search%' AND SURNAME NOT LIKE '$search') OR 
     (company_name LIKE '%$search%' AND company_name NOT LIKE '$search') 
) 
LIMIT $start, $limit; 
+0

Absolument parfait, merci beaucoup. Je ne m'attendais pas à être donné dans une assiette. – traxwriter

+0

C'est la première chose que je suis allé faire, mais je n'ai pas assez de points de rep pour voter. :( – traxwriter

Questions connexes