2010-07-29 6 views
0

J'ai une situation où j'ai des noms de fichiers stockés dans deux champs dans une table. Les champs sont appelés fichier1 et fichier2.Requête MySQL conditionnelle

Le fichier 1 est TOUJOURS présent. file2 peut ne pas être présent pour certaines lignes.

Je veux écrire une requête qui me procurerait seulement une certaine extension de fichiers de la base de données.

Pour que je me sers par exemple

...WHERE file1 LIKE '%jpg%' 

Mais ici, je ne peux pas utiliser AND file2 LIKE '%jpg%' parce que fichier2 peut être vide, ce qui est correct.

Alors, que dois-je faire pour que la condition LIKE ne soit appliquée que lorsque le champ n'est pas vide?

+3

Notez que fichier1 LIKE '% jpg%' correspondra à 'hbjpgx.gif'. Sauf si vous êtes absolument certain que cela n'arrivera pas, vous pourriez vouloir le faire comme '% .jpg' – Kendrick

Répondre

2

Essayez AND (file2 is NULL or file2 LIKE %jpg%)

+1

Il semble qu'il vous manque des guillemets autour de '% jpg%' :) –

0

Pourrait utiliser juste utiliser OR file2 LIKE '%jpg%'?

+0

Non. Cela lui donnerait File1 même s'il avait la mauvaise extension. – AllenG

+0

Les deux fichiers doivent avoir la même extension. L'utilisation de OU retournerait des lignes où l'extension n'est pas jpg dans un nom de fichier. – psyb0rg

2

Utiliser les parenthèses pour clarifier.

WHERE file1 LIKE '%jpg%' AND (file2 LIKE '%jpg%' OR file2 is NULL OR file2 = '') 

ou tout autres conditions que vous avez besoin de fichier2

2

Essayez ceci:

AND (file2 LIKE '%jpg%' OR file2 IS NULL (or file2 = '' depending on what your empty value is)) 
2
SELECT * 
FROM files 
WHERE file1 LIKE '%jpg' AND 
     (file2 LIKE '%jpg' OR file2 IS NULL); 

cas de test:

CREATE TABLE files (file1 varchar(20), file2 varchar(20)); 

INSERT INTO files VALUES ('pic1.jpg', NULL); 
INSERT INTO files VALUES ('pic2.png', NULL); 
INSERT INTO files VALUES ('pic3.jpg', 'otherpic.jpg'); 
INSERT INTO files VALUES ('pic4.png', 'nopic.jpg'); 
INSERT INTO files VALUES ('pic5.bmp', 'otherpic.gif'); 

Retours:

+----------+--------------+ 
| file1 | file2  | 
+----------+--------------+ 
| pic1.jpg | NULL   | 
| pic3.jpg | otherpic.jpg | 
+----------+--------------+ 
2 rows in set (0.00 sec) 
Questions connexes