У меня есть три таблицы: 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
.
Любое понимание или направление будут оценены. Я также могу предоставить более подробные примеры и информацию.
Вы выбираете только столбцы из таблицы в правой части соединения. Конечно, некоторые из них полностью нулевые, вы сделали левое соединение. Таким образом, эти записи соответствуют идентификатору в таблице в левой части соединения, но не к каким-либо данным с правой стороны соединения. Поскольку вы не возвращаете столбцы из левой таблицы, вы не видите никаких данных.