2011-12-25 37 views
1

我有一个返回与匹配特定类别的项目结果的查询......MySQL查询 - 加入造成混乱,我在此查询

有3个MySQL表导致此,itemscategoriesitem_categories

这些我假设是不言自明的,但后者是一个链接表,它使用id的匹配将任何特定项目链接到任何特定类别。

的项目表中包含一个行,具有1

id值类别表被填充有15行,具有1-15 id值。

的item_categories表包含行,则item_id值是1,并且category_id值为5

这是MySQL查询在其PHP的形式:

$catResultQuery = " 
     SELECT i.id, name, price 
     FROM items i 
     INNER JOIN item_categories 
      ON i.id = item_id 
     INNER JOIN categories c 
      ON category_id = c.id 
     WHERE MATCH (c.id) 
     AGAINST ('{$_SESSION['input']}' IN BOOLEAN MODE) 
     ORDER BY name 
"; 

会话变量具有值为5,但由于某种原因,此查询显示0结果集。

即使当我在php myadmin中运行查询,它返回0行。

而我很困惑,因为在我的脑海里,所有这些背后的逻辑看起来相当简单,但由于某种原因,我得到了0?有没有人有任何想法,我错了这个?

任何意见和输入将不胜感激,谢谢!

+2

它看起来正确,直到WHERE子句。如果您只是运行该顶部部分,即没有WHERE子句,数据是否会返回? – TetonSig 2011-12-25 20:40:51

+0

@TetonSig是的,它确实产生了数据,其余的被删除... – 2011-12-25 20:42:35

+1

MATCH AGAINST语法似乎是用于模式匹配,这可能会巧妙地混淆事物并增加不必要的复杂性。你可以只使用WHERE c.id = {$ _SESSION ['input']}或者你想匹配多个值,这只是一个简单的例子,只有一个? – TetonSig 2011-12-25 20:48:09

回答

1

好吧,我现在看到你正在动态地构建SQL。如果是这样的话,那么这应该工作:

SELECT i.id, name, price 
    FROM items i 
    INNER JOIN item_categories 
     ON i.id = item_id 
    INNER JOIN categories c 
     ON category_id = c.id 
    WHERE c.id 
    IN ('{$_SESSION['input']}') 
    ORDER BY name 

只要确保“{$ _SESSION [”输入“]}”是逗号分隔,并意识到这带有SQL注入的风险,因为你要构造即时的SQL。

+0

谢谢,这帮了我很多! – 2011-12-26 08:55:02