2010-11-18 53 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 

请假设上面的SQL代码在括号中搜索一组两个表,并返回结果,但由于某种原因,它没有这样做。我究竟做错了什么?在查询中搜索多个表

谢谢。

+1

它在做什么呢?任何错误?不同的结果? – deceze 2010-11-18 07:54:53

+0

@deceze默认返回5个结果。如果没有独特的关键字,它会返回与城市相匹配的每条记录,并返回与城市及其特定类别或子类别相对应的东西。 @Haim Evgi,将会这样做。谢谢 – Cyberomin 2010-11-18 07:59:28

+0

cityID可能是一个数字。如果是这样,不要将'$ city'放在引号中。 – 2010-11-18 08:38:22

回答

2

您的查询会产生一个cartesian product。取决于可能需要相当长时间的表的大小。

根据您的说明,我会使用子查询来检查匹配的类别,这样您不必在查询中使用不同的元素,因为它只会返回每个业务一次。我也建议你从一个体面的SQL教程开始。

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,业务表具有类别ID和子类别ID,换言之,它们都是外来的业务桌上的钥匙。查询的目的是根据城市ID和输入的类别或子类别获取业务名称和描述。 – Cyberomin 2010-11-18 08:13:53

+0

@Martin,你能为我重新编写代码吗?谢谢。 – Cyberomin 2010-11-18 08:22:58

+0

SELECT business.name AS BUSINESSNAME, \t business.description AS描述 FROM业务 WHERE business.cityID = 1 和'status' = 0 AND(business.catID在(从类别中选择id其中'name'像' %Hotels%') 或business.subCatID in(从sub_categories中选择ID,其中name为'%$ Hotels%') ),但它不返回任何结果。 – Cyberomin 2010-11-18 08:45:59

0

两件事情浮现在脑海中:

  1. 您还没有加入任何三个表在一起。考虑添加一些LEFT JOIN子句。
  2. 您只从一个表中选择列。如果你想要其他表的列,你应该将它们添加到你的SELECT子句中。
+0

感谢您的回复,请问您能否以正确的方式为我设置sql格式。谢谢。 – Cyberomin 2010-11-18 08:02:20

+0

“格式”是什么意思? – cdhowie 2010-11-18 08:03:34

+0

好吧,代码的正确方式是假设写入JOIN和全部。这是关系;业务表具有类别ID和子类别ID,换言之,它们都是业务表上的外键。查询的目的是根据城市ID和输入的类别或子类别获取业务名称和描述 – Cyberomin 2010-11-18 08:18:23