、、、およびという3つのテーブルがusers
あります。facilities
staff_facilities
users
users.id
平均的なユーザーデータが含まれています。私の場合、最も重要なフィールドは、、、users.first
ですusers.last
。
facilities
また、かなりの量のデータが含まれていますが、を除いて、必ずしもこの例に関連するものではありませんfacilities.id
。
staff_facilties
(int、 auto_inc staff_facilities.id
、NOT NULL)、staff_facilities.users_id
(int、NOT NULL)、およびstaff_faciltities.facilities_id
(int、NOT NULL)で構成されます。(それは一口です!)
staff_facilities
他の2つのテーブルのIDを参照し、このテーブルを呼び出してユーザーの施設と施設のユーザーを検索します。
これは、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
このクエリは開発サーバーではうまく機能しますが、クライアントの本番環境にドロップすると、結果セットに空白行が表示されることがよくあります。私たちの開発サーバーは、クライアントの本番サーバーにすでに存在する複製されたテーブルとデータを使用していますが、ハードウェアとソフトウェアはかなり異なります。
これらの行には、データベースにNOTNULL値を入力する必要がある3つのidフィールドを含む情報がありません。バックエンドでMySQL管理ツールを使用してクエリを実行すると、同じ結果が返されます。テーブルでNULLフィールドを検索しても、何も見つかりませんでした。
もう1つの奇妙な点は、WHERE句のIDチェックによって生じるさまざまな結果に基づいて、空の行の数が変化していることです。通常、空の行は1〜3行程度ですが、同じパラメーターを使用すると一貫性があります。
LEFT JOINSが原因でほぼ重複する行が返されることに何度も対処しましたが、これまでにこれが発生したことはありません。情報を表示する限り、エンドユーザーから簡単に隠すことができます。私の懸念は、主に、時間が経過し、レコードの数が増えるにつれて、この問題が悪化することです。現状では、このシステムはインストールされたばかりであり、すでに2000以上のレコードがstaff_facilities
テーブルにあります。
任意の洞察や方向性をいただければ幸いです。さらに詳細な例と情報も提供できます。