Хобрук: Ваш путь к мастерству в программировании

Выбирайте записи, только если у них несколько записей

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

Например. В настоящее время у меня есть курс, который имеет 20 разных мест, и у всех есть 3 даты:

Курс 1: место проведения Амстердам даты: 01-09-2013 - 03-09-2013 - 02-10-2013

Курс 2: место проведения Амстердам даты: 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 ";

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

19.09.2013

  • Почему вы сохраняете даты по отдельности? Какова цель трех свиданий? Являются ли занятия трехдневными, и это три дня, или одно и то же занятие проводится три раза в разное время? 19.09.2013
  • это, вероятно, вызвано GROUP BY locaties_datum.code 19.09.2013
  • @wesley, занятия трехдневные. 20.09.2013

Ответы:


1

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

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?

19.09.2013
  • Спасибо за ваш ответ. Когда я использую предоставленный вами запрос. Я получаю сообщение об ошибке:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?) ORDER BY d.van ASC' Как передать дату в запрос? 20.09.2013
  • См. это: stackoverflow .com/questions/60174/ 20.09.2013
  • Новые материалы

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..