Table EmplacementsComment utiliser rejoindre correctement
loc_id loc_name hier2 hier3 hier4 hier5 hier6 hier7 hier8 hier9
152675 Castelli 105 109 0 319 14356 152673 152675 0
14356 Rome 105 109 0 319 14356 0 0 0
...
Tableau Lacations Références
oid name loc_id
12 Demo Villa 152675
...
Maintenant, je tente de trouver des entrées utilisateur effectue une recherche en entrant la chaîne "caste":
SELECT geo.loc_id, geo.loc_name AS name
FROM locations AS geo
LEFT JOIN locations AS geoh3 ON geo.hier3 = geoh3.loc_id
LEFT JOIN locations AS geoh4 ON geo.hier4 = geoh4.loc_id
LEFT JOIN locations AS geoh8 ON geo.hier8 = geoh8.loc_id
WHERE geo.loc_name LIKE 'caste%'
GROUP BY geo.loc_name
Cela fonctionne. Je reçois l'entrée avec LOC_ID 152675
Maintenant, je veux seulement obtenir ces entrys que nous avons des objets dans Donc, je rejoins la table de référence.
SELECT geo.loc_id, geo.loc_name AS name
FROM locations AS geo
LEFT JOIN locations AS geoh3 ON geo.hier3 = geoh3.loc_id
LEFT JOIN locations AS geoh4 ON geo.hier4 = geoh4.loc_id
LEFT JOIN locations AS geoh8 ON geo.hier8 = geoh8.loc_id
RIGHT JOIN locations_xref AS gx ON geo.loc_id = gx.loc_id
WHERE geo.loc_name LIKE 'caste%'
GROUP BY geo.loc_name
Cela fonctionne. Encore une fois j'obtiens l'entrée de localisation avec loc_id 152675 parce qu'il y a une référence.
PROBLÈME
Maintenant, les recherches des utilisateurs pour "Rome". Je ne reçois aucune entrée car il n'y a pas de référence d'objet directement à la ville "Rome". L'objet existant est référencé à un quartier de Rome.
Comme vous pouvez voir les entrées de district et de ville ont des ID de hiérarchie qui peuvent être utilisés pour identifier la structure correcte. Je ne peux pas l'obtenir pour travailler avec la table de référence, donc je reçois seulement les objets qui sont dans "Rome" ou dans un quartier qui fait partie de Rome.
Toute aide est grandement appréciée!
Désolé, c'est une question idiote, mais pourquoi 'name' dans le tableau des références de localisation est différent de' loc_name' dans 'Locations' pour le même' loc_id'? Sont-ils censés être identiques ou est-ce normal qu'ils soient différents? Fondamentalement, je ne suis pas sûr de comprendre à quoi sert la table de références. –
Le champ "nom" dans la table de référence fait référence au nom d'un objet immobilier. Cela n'a donc rien à voir avec les emplacements géographiques. – Mike
Les colonnes 'hier2' ...' hier9' suggèrent une forme de table dés-normalisée sous-optimale qui rend vos requêtes complexes et lentes. –