2013-05-31 4 views
0

J'essaye de créer une requête qui prend quelques paramètres d'entrée. Peu de choses à noter ...Requête de recherche MySQL utilisant LIKE

  1. Tous les paramètres ne doivent pas nécessairement être transmis à la requête.
  2. Si un paramètre ne va pas être passé à la requête, doit-il toujours être passé mais NULL?
  3. Si un paramètre n'est pas passé, comment le construire pour ne pas inclure le paramètre?

dire ... Vous avez donc

IN name VARCHAR(30), 
IN age VARCHAR(2), 
IN address VARCHAR(50) 

et que vous voulez effectuer une recherche par nom ...

SELECT * FROM Table WHERE 
(
NAME LIKE CONCAT(name, '%') 
); 

Cela ne semble pas fonctionner parce que l'âge n » était pas t passé. Ou si le nom a été passé et l'adresse, mais pas l'âge? Comment pourrais-je construire ça?

Répondre

1

En tant qu'Etat affiche précédente, passez NULL pour les paramètres inutilisés. Puis structurez votre requête de manière similaire à ...

SELECT * FROM Table WHERE 
(
    ((nameParameter IS NULL) OR (NameColumn LIKE '%' + NameParameter + '%')) 
    AND 
    ((ageParameter IS NULL) OR (AgeColumn = ageParameter)) 
    AND 
    ((addressParameter IS NULL) OR (AddressColumn = addressParameter)) 
) 
0

Essayez ceci:

SELECT * FROM Table 
WHERE name LIKE '%nametofind%'; 
1

La question est des paramètres optinal ne peuvent pas être utilisés dans MYSQL. La solution de contournement consiste à passer la valeur NULL pour le paramètre et à l'intérieur de la procédure stockée utiliser l'instruction IF pour gérer les différentes situations.

Jetez un oeil ici:

Writing optional parameters within stored procedures in MySQL?

Questions connexes