2015-11-11 2 views
0

У меня есть короткий вопрос, я застрял на этом этапе. У меня есть следующий запрос:Если EXISTS (MYSQL) только получить этот результат

SELECT A, B 
FROM my_table AS r 
LEFT JOIN my_table_2 AS p ON r.rs_id = p.rs_id 
WHERE r.rs_id = $DB->quote($_SESSION['mysession']['id']) EXISTS (SELECT A, B, date FROM my_table WHERE date = CURDATE())'; 

Что я пытаюсь сделать, так это получить результаты из базы данных. Если есть строка, которая имеет запись, которая соответствует текущей дате, я хочу только получить эти строки, поэтому не все A + B больше. Если нет строк с текущей датой, я хочу загрузить все A + B по умолчанию.

Кто-нибудь знает ответ? Благодаря!

+1

Уже ответил http://stackoverflow.com/questions/1676551/best-way-to-test -if-a-row-exists-in-a-mysql-table – Rejaul

+0

@Rejaul Кажется, вы не полностью прочитали вопрос. – fancyPants

ответ

1

Чтобы сделать это чистым способом, вы должны проверить уровень приложения, если запрос, ищущий записи с датой, равной текущей дате, возвращает любые записи. Если нет, выполните второй запрос.

Вы можете сделать то же самое в MySQL, но так как это немного «грязно» (используемые методы не предназначены для использования таким образом), я бы рекомендовал разрешить это на уровне приложений. В случае, если вам интересно, вот как:

SELECT SQL_CALC_FOUND_ROWS whatever 
FROM table 
WHERE date_column = CURDATE() 
UNION ALL 
SELECT whatever 
FROM table 
WHERE FOUND_ROWS() = 0; 
  • подробнее об этом here
Смежные вопросы