2010-07-29 4 views
0

У меня есть ситуация, когда у меня есть имена файлов, хранящиеся в двух полях в таблице. Поля называются file1 файлом2.MySQL условный запрос

файл1 ВСЕГДА присутствует. file2 может не присутствовать в некоторых строках.

Я хочу написать запрос, который доставит мне только определенное расширение файлов из БД.

Для этого я использую, например

...WHERE file1 LIKE '%jpg%' 

Но здесь я не могу использовать AND file2 LIKE '%jpg%' потому file2 может быть пустым, что это нормально.

Итак, что мне делать, чтобы условие LIKE применялось только тогда, когда поле не пусто?

+3

отмечают, что file1 LIKE '% JPG%' будет соответствовать 'hbjpgx.gif'. Если вы не уверены, что этого не произойдет, вы можете сделать это LIKE '% .jpg' – Kendrick

ответ

2

Попробуйте AND (file2 is NULL or file2 LIKE %jpg%)

+1

Похоже, что вам не хватает котировок вокруг '% jpg%' :) –

0

Может ли использовать только OR file2 LIKE '%jpg%'?

+0

Нет. Это принесло бы ему File1, даже если у него было неправильное расширение. – AllenG

+0

Оба файла должны иметь одинаковое расширение. Использование OR будет возвращать строки, где расширение не является jpg в одном имени файла. – psyb0rg

2

Используйте круглые скобки для уточнения.

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

или любые другие условия, вам нужно от file2

2

Попробуйте это:

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); 

Контрольный пример:

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'); 

Возвращает:

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