2013-09-19 3 views
0

Мне было интересно, можно ли выбрать некоторые записи из базы данных, имеющие по крайней мере 3 записи, соответствующие запросу?Выберите только записи, когда у них есть несколько записей.

Например. Я в настоящее время курс, который имеет 20 различных локаций и все имеют 3 даты:

курс 1: расположение дат Амстердам: 01-09-2013 - 03-09-2013 - 02-10-2013

курс 2 : location Амстердамские даты: 10-10-2013 - 11-10-2013 - 12-10-2013

У меня есть даты, сохраненные отдельно в базе данных. Теперь, когда я выбираю даты сегодняшнего дня и выше, я получаю только последнюю дату курса 1 (первый, конечно, 2). Это не то, чего я хочу.

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

Это запрос у меня есть:

$query = "SELECT locaties_datum.id, locaties_datum.cursus_id, 
locaties_datum.locatie_id, locaties_datum.van, locaties_datum.code, 
locaties.plaats, locaties.link FROM locaties, locaties_datum WHERE 1 = 1 AND 
locaties_datum.locatie_id = locaties.locatie_id AND 
locaties_datum.van > '". strtotime("now") ."' AND 
locaties.active = '1' AND 
locaties_datum.cursus_id = '9' AND 
locaties.locatie_id = '71' 
GROUP BY locaties_datum.code 
ORDER BY locaties_datum.van ASC "; 

Можно ли делать то, что я хочу?

+0

Почему вы сохраняете даты индивидуально? Какова цель этих трех дат? Являются ли классы трехдневными классами, и это три дня или один класс проводится три раза? – wesleywmd

+0

это, вероятно, вызвано 'GROUP BY locaties_datum.code' – Elen

+0

@wesley классы представляют собой трехдневный класс. – user2485647

ответ

0

Это, вероятно, что вы хотите:

SELECT d.id, d.cursus_id, d.locatie_id, d.van, d.code, l.plaats, l.link 
FROM locaties AS l 
INNER JOIN locaties_datum AS d ON d.locatie_id = l.locatie_id 
WHERE l.active = '1' 
AND d.cursus_id = '9' 
AND l.locatie_id = '71' 
AND EXISTS (SELECT 1 FROM locaties_datum AS sd WHERE sd.locatie_id = d.locatie_id AND sd.van > ?) 
ORDER BY d.van ASC 

Это будет выбрать все locaties и все их locaties_datum если locaties_datum имеет, по меньшей мере, один ряд которого van больше, чем параметр подаваемого (например, сегодня).

В качестве побочного примечания. Вы должны либо передать дату в качестве параметра в запрос, либо использовать встроенную функцию sql-сервера. Не интерполируйте его в строку запроса. Кроме того, ints являются strings?

+0

Благодарим вас за ответ. Когда я использую запрос, который вы предоставили. Я получаю сообщение об ошибке: «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с??) ORDER BY d.van ASC ''Как передать дату в запрос? – user2485647

+0

Смотрите это: http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – user2722968

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