2010-07-17 2 views
0

У меня есть photos таблицу в базе данных, которая использует status колонку для обнаружения, если фотография была подтверждена или нет ...MySQLi: ВЫБРАТЬ приоритет использования ИЛИ

так, если фотография имеет status = 0, то его не проверенную, но если status = 1, то фотография была подтверждена.

Я хочу добавить status = 2 для выбора фото в качестве «главного фото», так что я могу использовать

SELECT photo WHERE status = 2 

но если нет «основного фото» выбран Я хочу, чтобы выбрать любую другую фотографию, но дать приоритет фотографии со статусом = 2, если таковой имеется .. поэтому я хочу использовать что-то вроде этого:

SELECT photo WHERE status = 2 OR status != 2 

.. но дает приоритет фото со статусом 2 ... так что если есть фото с status 2 он выберет эту фотографию, но если нет, то можно будет выбрать t любое фото ...

Его можно сделать?

+3

Я понимаю, почему вы делаете столбец 'status', выполняете двойную функцию, указывая валидацию и основную фотографию, но я бы рекомендовал не делать это, если это возможно, потому что это провалило бы проверку в коридоре. Возьмите то, что вы делаете с кем угодно, и посмотрите, понимают ли они, что происходит, и вы не объясните им это. Будьте откровенны в своих столбцах - 'validation_status' и' main_photo_ind' должно быть два столбца с описательными именами. И возможные внешние ключи ... –

ответ

0

Если status=2 всегда наивысший приоритет:

SELECT photo WHERE status = 2 OR status != 2 FROM your_table_name ORDER BY status 

Или лучше:

SELECT photo FROM your_table_name ORDER BY status 

потому что status = 2 OR status != 2 есть все

+0

OR довольно бессмысленно. – Donnie

+0

Скопировать и вставить от автора – jigfox

0

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

SELECT photo, status = 2 AS priority 
FROM table 
ORDER BY priority DESC 

Здесь выражение status = 2 будет оцениваться либо 1 (status = 2 истинно) или 0 (status = 2 ложно).

+0

Ницца, похоже, что у вас много опыта ... – Jonathan

0

если статус = 2 НЕ всегда высокий приоритет, вы по-прежнему может получить первые строки со статусом = 2, а затем все остальные:

SELECT photo FROM table ORDER By status=2 desc 
1

Предлагаю вам добавить еще один столбец для хранения этого факта. Если вы этого не сделаете, рано или поздно (скорее всего, скорее) появится другое значение статуса, а затем возникнет путаница, особенно если столбец состояния может иметь несколько значений (например, 3 = проверенная и основная фотография).

+0

Возможно, в следующем обновлении кода я сделаю некоторые оптимизации БД ... – Jonathan

Смежные вопросы