2011-12-25 35 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