Пустые строки в MySQL SELECT с LEFT JOIN

0

У меня есть три таблицы: users, facilities и staff_facilities.

users содержит средние пользовательские данные, наиболее важные поля в моем случае - users.id, users.first и users.last.

facilities также содержит достаточное количество данных, но ни один из них не обязательно относится к этому примеру, кроме facilities.id.

staff_facilties состоит из staff_facilities.id (int, auto_inc, NOT NULL), staff_facilities.users_id (int, NOT NULL) и staff_faciltities.facilities_id (int, NOT NULL). (Это глоток!)

staff_facilities ссылается на идентификаторы для двух других таблиц, и мы вызываем эту таблицу для поиска пользователей и объектов пользователей.

Это мой запрос select в PHP:

SELECT users.id, users.first, users.last FROM staff_facilities LEFT JOIN users ON staff_facilities.users_id=users.id WHERE staff_facilities.facilties_id=$id ORDER BY users.last

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

Эти строки лишены какой-либо информации, включая три поля id, для которых в базу данных должны быть введены значения NOT NULL. Выполнение запроса с помощью инструментов управления MySQL на бэкэнд возвращает те же результаты. Поиск таблицы для полей NULL ничего не изменил.

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

Я много раз занимался возвращением почти дублированных строк из-за LEFT JOINS, но я никогда раньше этого не делал. Что касается отображения информации, я могу скрыть ее от конечного пользователя. Моя забота в первую очередь заключается в том, что эта проблема будет усугубляться с течением времени, а число записей увеличивается. Когда он сидит, эта система только что была установлена, и у нас уже есть 2000+ записей в таблице staff_facilities.

Любое понимание или направление будут оценены. Я также могу предоставить более подробные примеры и информацию.

Теги:
left-join

1 ответ

4
Лучший ответ

Вы выбираете только столбцы из таблицы в правой части соединения. Конечно, некоторые из них полностью нулевые, вы сделали левое соединение. Таким образом, эти записи соответствуют идентификатору в таблице в левой части соединения, но не к каким-либо данным с правой стороны соединения. Поскольку вы не возвращаете столбцы из левой таблицы, вы не видите никаких данных.

  • 1
    О, мое слово Шлепает по лбу Я слишком долго на это пялился. Вот и все. Просто и очевидно. Это помогает иметь свежий набор глаз. Благодаря тонну!
  • 2
    Эй, я не могу сказать вам, как часто я смотрел на что-то, пытаясь выяснить, что было не так, и кто-то еще заметил это через секунду, когда я показал им это. Мы все были там, я думаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню