2010-05-22 4 views
0

J'ai une requête sql qui exécute un LEFT JOIN sur 2 tables dans lesquelles certaines des colonnes sont ambiguës. Je peux préfixer les tables jointes mais quand j'essaye de préfixer une des colonnes de la table dans la clause FROM, elle me dit la colonne inconnue. J'ai même essayé de donner à cette table un alias comme ça ... A partir des points AS p et en utilisant "p" pour préfixer les tables mais cela ne fonctionnait pas non plus. Quelqu'un peut-il me dire ce que je fais mal. Voici ma question:Table alias - Colonne inconnue dans la liste des champs

SELECT point_title, point_url, address, city, state, zip_code, 
    phone, `points`.`lat`, `points`.`longi`, featured, 
    kmlno, image_url, category.title, category_id, 
    point_id, lat, longi, reviews.star_points, reviews.review_id, 
    count(reviews.point_id) as totals 
FROM (SELECT *, 
      (3959 * acos(cos(radians('37.7717185')) * cos(radians(lat)) 
       * cos(radians(longi) - radians('-122.4438929')) 
       + sin(radians('37.7717185')) * sin(radians(lat)))) AS distance 
     FROM points 
     HAVING distance < '25') as distResults 
LEFT JOIN category USING (category_id) 
LEFT JOIN reviews USING (point_id) 
    WHERE (point_title LIKE '%Playgrounds%' OR category.title LIKE '%Playgrounds%') 
GROUP BY point_id 
ORDER BY totals DESC, distance 
    LIMIT 0, 10 

Voici le schéma pour les tables impliquées:

Points Clt: Champ Type Null Par défaut Commentaires point_id int (11) Non
point_title varchar (255) Non
category_id int (11) Non
texte Pas de description
point_url varchar (255) Non
adresse varchar (255) Non
ville varchar (255) Non
état varchar (255) Non
zip_code varchar (255) Non
téléphone varchar (255) Non
nom varchar (255) Non
latitude varchar (25) Non
Longi varchar (25) no
user_id int (2) n 0
int sélectionnée (1) Non 0
statut int (1) n ° 1
kmlno int (2) n 0
lastupdate varchar (255) n
image_url varchar (255) Non

table Commentaires: Type de champ Null Par défaut Commentaires review_id int (11) Pas
examen int (1) 0
review_title varchar (255) Non
texte review_desc Pas
star_points int (11) no 0
user_id int (11) no 0
point_id int (11) no
lat varchar (25) no
longi varchar (25) no
lastupdate varchar (255) Non
statut varchar (1) r

Catégorie Tableau: Champ Type Null Par défaut Commentaires category_id int (11) Non
titre varchar (255) Non
texte Pas de description
nom de fichier varchar (255) no
image_name varchar (255) n
statut int (1) n 0
lastupdate varchar (255) n

+0

Quelle colonne vous pose problème? Pouvez-vous formater votre requête pour qu'il soit possible de la lire? –

+0

Je l'ai compris. Au lieu de préfacer les colonnes lat et longi avec des «points», j'ai dû faire une préface avec «distResults» puisque c'est l'alias de la table qui est utilisé. Merci à tous pour l'aide. – Jason

Répondre

0

Sans voir votre schéma, il est difficile de savoir avec certitude quel est le problème. Mais je vois un problème - déplacer la distance HAVING < 25 de la sélection interne à la sélection externe. Le nom "distance" n'est pas disponible pour la sélection interne. J'ai aussi changé d'endroit pour O WH, puisqu'il n'y avait pas de GROUP BY.

SELECT point_title, point_url, address, city, state, zip_code, 
    phone, `points`.`lat`, `points`.`longi`, featured, 
    kmlno, image_url, category.title, category_id, 
    point_id, lat, longi, reviews.star_points, reviews.review_id, 
    count(reviews.point_id) as totals 
FROM (SELECT * FROM (SELECT *, 
     (3959 * acos(cos(radians('37.7717185')) * cos(radians(lat)) 
      * cos(radians(longi) - radians('-122.4438929')) + 
      sin(radians('37.7717185')) * sin(radians(lat)))) AS distance 
     FROM points) AS distResultsInner 
     WHERE distance<25)) AS distResults 
LEFT JOIN category USING (category_id) 
LEFT JOIN reviews USING (point_id) 
WHERE (point_title LIKE '%Playgrounds%' 
    OR category.title LIKE '%Playgrounds%') 
GROUP BY point_id ORDER BY totals DESC, distance 
LIMIT 0 , 10 
+0

Ok merci, mais je reçois cette erreur avec la requête ci-dessus: # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de) AS distResults LEFT JOIN catégorie UTILISER (category_id) LEFT JOIN critiques U 'à la ligne 11 – Jason

+0

Message original mis à jour pour montrer le schéma – Jason

+0

Oui, il y avait une erreur . J'ai mis à jour la requête. – mdma

Questions connexes