LIMIT приводит к MySQL?

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

Вот запрос, который у меня есть ….

$query = "SELECT * FROM events WHERE event_type = 'Christmas Listings' AND event_active='Yes' ORDER BY event_date ASC LIMIT 5"; $result= mysql_query($query); 

Хорошо … теперь для простого английского бита о том, чего я хочу достичь (чтобы понять, чего я пытаюсь достичь):

  1. Я хочу проверить тип события (« event_type ») – это то, что я получаю (например, Рождественские листинги), поскольку в этом столбце есть несколько типов.

  2. Я хочу проверить, что событие активно (« event_active ») – «Да» (данные в этом поле «Да / Нет»).

  3. Я хочу заказать их с помощью (' event_date ') ASC (данные в этом поле – yyyy-mm-dd ), поэтому они показывают последнюю запись по дате из БД.

  4. Я хочу LIMIT (или каким-то образом контролировать вывод), чтобы результаты отображали только 5 результатов при выполнении такого типа запроса с помощью инструкции WHILE.

Хорошо, все работает, НО; когда я добираюсь до фактического отображения вывода, у меня есть шаткий вывод о том, сколько результатов на самом деле отображается … Что происходит, если у меня есть несколько отключенных событий, так как в event_active is ' Off ', то это почти похоже на аргумент подсчитывается из всех результатов (включая event_active='Off' ) и, следовательно, не показывает, как я ожидаю их отображения?

Надеюсь, это имеет смысл … Любая помощь будет с благодарностью воспринята.

 SELECT * FROM events WHERE event_type = 'Christmas Listings' AND event_active='Yes' ORDER BY event_date LIMIT 0, 5 

поэтому ваше заявление легче читать.

  1. Вы используете 1/0 вместо Yes / no
  2. Предел не учитывает все строки! Первый шаг – выполнение запроса, включая WHERE Второй шаг – ORDER BY Третий шаг – LIMIT Если вы установили индекс в сортировке colum. Сорт остановится после 5 строк, а также означает, что он быстрее
  3. ASC в команде ORDER BY не требуется, поскольку ASC по умолчанию

Я действительно не уверен, что вы просите, но LIMIT работает следующим образом:

LIMIT означает, что после завершения запроса и выполнения всех WHERE возвращаются только первые 5.

Результаты ALl, где event_active не является «Да», не будут отображаться и не будут учитываться во всем.

Этот результат будет таким же, как результат, когда вы будете делать запрос без ограничения, и просто посмотрите на первые 5 строк.

Этот запрос должен быть точным. Я бы проверил ваш набор данных (или даже лучше, опубликуйте его!). Возможно, вы захотите также изучить нормализацию базы данных. Это поможет вам в будущем.

Проблема, я думаю, связана с вашим «event_active».

MySQL использует 0 и 1, чтобы указать, является ли поле истинным / ложным, да / нет, вкл / выкл. Попробуйте использовать 0 и 1 в инструкции SELECT, если поле типа в этом поле не является VARCHAR, и вы фактически используете эти слова.