2010-11-18 7 views
0
SELECT DISTINCT business.name AS businessname 
     ,business.description AS description 
FROM business 
     , category 
     , sub_categories 
WHERE business.cityID = '$city' 
     AND (category.name LIKE '%$name%' 
      OR sub_categories.name LIKE '%$name%') 
     AND business.status = 0 

Pls le code SQL ci-dessus est supposé rechercher un ensemble de deux tables celles du support et de retourner le résultat, mais pour une raison quelconque, il ne le faire. Qu'est-ce que je fais mal?Recherche plusieurs tables dans la requête

Merci.

+1

Que fait-il à la place? Des erreurs? Des résultats différents? – deceze

+0

@deceze Il retourne par défaut 5 résultats. Sans le mot-clé distinct, il renvoie tous les enregistrements qui correspondent à la ville par rapport aux objets retournés qui correspondent à la ville et à leurs catégories ou sous-catégories spécifiques. @Haim Evgi, le fera. Merci – Cyberomin

+0

cityID est probablement un nombre. Si tel n'est pas le cas, insérez '$ city' entre guillemets. –

Répondre

2

Votre requête produirait un cartesian product. Selon la taille de vos tables, cela peut prendre beaucoup de temps. Sur la base de votre clarification, j'utiliserais une sous-requête pour rechercher des catégories correspondantes, de cette façon vous n'avez pas besoin d'utiliser distinct dans votre requête, car cela ne retournerait qu'une seule fois chaque entreprise. Je vous suggère également de commencer avec un didacticiel SQL décent.

SELECT name AS businessname 
     ,description AS description 
FROM business 
WHERE cityID = '$city' 
AND  status = 0 
AND ( categoryID in (select id from category where name like '%$name%') 
    or subcategoryID in (select id from sub_categories where name like '%$name%') 
) 
+0

@Martin, la table métier a l'ID de la catégorie et l'ID de la sous-catégorie. touches sur la table d'affaires. Le but de la requête est d'obtenir le nom de l'entreprise et sa description en fonction de l'identifiant de la ville et de la catégorie ou sous-catégorie saisie. – Cyberomin

+0

@ Martin, pouvez-vous réécrire le code pour moi. Je vous remercie. – Cyberomin

+0

SELECT business.name AS businessname, \t business.description AS Description des affaires OÙ business.cityID = 1 ET 'status' = 0 ET (business.catID dans (select id de la catégorie où' name' comme ' % Hotels% ') ou business.subCatID dans (sélectionnez id de sub_categories où 'name' comme'% $ Hotels% ') ), mais il ne renvoie aucun résultat. – Cyberomin

0

Deux choses viennent à l'esprit:

  1. Vous n'êtes pas joindrez l'une des trois tables ensemble. Envisagez d'ajouter quelques clauses LEFT JOIN.
  2. Vous sélectionnez des colonnes dans une seule table. Si vous souhaitez des colonnes provenant d'autres tables, vous devez les ajouter à votre clause SELECT.
+0

merci pour vos réponses, SVP pouvez-vous formater le sql de la bonne façon pour moi. Merci. – Cyberomin

+0

Que voulez-vous dire par "format?" – cdhowie

+0

Ok, la bonne façon dont le code est le code est supposé être écrit, avec les JOIN et tout. Voici la relation; la table métier a l'ID de la catégorie et l'ID des sous-catégories, autrement dit, il s'agit de toutes les clés étrangères de la table métier. Le but de la requête est d'obtenir le nom de l'entreprise et sa description en fonction de l'ID de la ville et de la catégorie ou sous-catégorie saisie – Cyberomin

Questions connexes