Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Выбор записей из таблицы по типу файла

#php #sql


В таблице upload_files содержится путь к фотографиям и текстовым документам.
Я делаю выборку для фотографий так:

SELECT * FROM `uploаd_files`
WHERE name_pos LIKE '%.jpg'
    OR (`name_pos` LIKE '%.png' OR `name_pos` LIKE '%.gif') 
    AND `ip_users` = '$link' ORDER BY `name_pos` DESC


И для документов:

SELECT * FROM `upload_files` 
WHERE name_pos NOT LIKE '%.jpg' 
    OR (`name_pos` NOT LIKE '%.png'
    OR `name_pos` NOT LIKE '%.gif') 
    AND `ip_users` = '$link' 
ORDER BY `name_pos` DESC


Но результат получается неверный. Что я делаю неправильно?
    


Ответы

Ответ 1



Ну а для решения проблемы, думаю, надо скобки переставить: SELECT * FROM `uplod_files` WHERE (`name_pos` LIKE '%.jpg' OR `name_pos` LIKE '%.png' OR `name_pos` LIKE '%.gif') AND `ip_users` = '$link' ORDER BY `name_pos` DESC и SELECT * FROM `uplod_files` WHERE NOT (`name_pos` LIKE '%.jpg' OR `name_pos` LIKE '%.png' OR `name_pos` LIKE '%.gif') AND `ip_users` = '$link' ORDER BY `name_pos` DESC И ещё, я бы исправил WHERE следующим образом: WHERE RIGHT(`name_pos`, 3) IN ('jpg', 'png', 'gif') AND `ip_users` = '$link' Ну и соответственно для документов: WHERE NOT RIGHT(`name_pos`, 3) IN ('jpg', 'png', 'gif') AND `ip_users` = '$link'

Ответ 2



Вам надо аккуратнее работать со скобками и отрицанием. Если не знаете приоритетов операций, ставьте скобки. Я напишу псевдокод: графика: ((имя похоже на 'А') ИЛИ (имя похоже на 'B') ИЛИ (имя похоже на 'C')) И пользователь такой-то не графика: НЕ ((имя похоже на 'А') ИЛИ (имя похоже на 'B') ИЛИ (имя похоже на 'C')) И пользователь такой-то На самом деле было бы мудрее завести в таблице отдельное поле "mime-type" и проверять его, а не имя файла. Заполнять его один раз при загрузке файла. … WHERE (mime_type LIKE 'image/%')…

Ответ 3



Процент в лайке в начале строки - плохая практика, данный запрос не попадет в индекс по полю, потому при росте базы запрос будет лавиннобразно есть все больше памяти и выполняться все медленее.

Комментариев нет:

Отправить комментарий