Question

J'ai trois tables appelées: users, facilities et staff_facilities.

users.id contient les données utilisateur moyennes, les champs les plus importants dans mon cas étant users.first, users.last et facilities.id.

staff_facilties contient également une bonne quantité de données, mais aucune d’entre elles n’est nécessairement pertinente pour cet exemple, sauf staff_facilities.id.

staff_facilities.users_id est composé de staff_faciltities.facilities_id (int, auto_inc, NOT NULL), <=> (int, NOT NULL) et <=> (int, NOT NULL). (C'est une bouchée!)

<=> référence les identifiants des deux autres tables, et nous appelons cette table pour rechercher les installations des utilisateurs et les utilisateurs des installations.

C’est ma requête sélectionnée en 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

Cette requête fonctionne parfaitement sur notre serveur de développement, mais lorsque je la dépose dans l'environnement de production du client, les lignes vierges apparaissent souvent dans l'ensemble de résultats. Notre serveur de développement utilise les tables et les données répliquées qui existent déjà sur le serveur de production du client, mais le matériel et les logiciels varient un peu.

Ces lignes sont dépourvues de toute information, y compris les trois champs id qui nécessitent la saisie de valeurs NOT NULL dans la base de données. L'exécution de la requête via les outils de gestion MySQL sur le backend renvoie les mêmes résultats. La recherche de champs NULL dans la table n'a rien révélé.

L’autre chose étrange est que le nombre de lignes vides change en fonction des résultats variables causés par la vérification de l’identité de la clause WHERE. Il s’agit généralement d’une à trois lignes vides, mais elles sont cohérentes lorsque vous utilisez le même paramètre.

J'ai souvent eu à traiter avec le retour de lignes en double à cause de LEFT JOINS, mais je ne l'avais jamais fait auparavant. En ce qui concerne l'affichage des informations, je peux facilement les masquer à l'utilisateur final. Mon souci est principalement que ce problème s'aggrave à mesure que le temps passe et que le nombre de disques augmente. En l'état, ce système vient d'être installé et nous avons déjà plus de 2000 enregistrements dans la table <=>.

Toute idée ou direction serait appréciée. Je peux également fournir des exemples et des informations plus détaillés.

Était-ce utile?

La solution

Vous ne sélectionnez que des colonnes dans le tableau situé à droite de la jointure. Bien sûr, certaines d'entre elles sont complètement nulles, vous avez fait une jointure à gauche. Ainsi, ces enregistrements correspondent à un identifiant dans la table du côté gauche de la jointure, mais à aucune donnée du côté droit de la jointure. Puisque vous ne retournez aucune colonne de la table de gauche, vous ne voyez aucune donnée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top