2017-02-27 39 views
0

我試圖顯示產品屬於該位置,但我失敗了。sql反向使用

db_products.locationId商店的ID字符串如1,2,5,9

:locationId店的位置ID喜歡我把這個變量作爲參數傳遞給SQL查詢。

+0

嘗試創建參數化的綁定列名稱是不合法的語法! – RiggsFolly

+0

錯字?看起來你在'db_products.pcId = 1'後省略了'AND' –

+0

這個必須產生一個錯誤信息,你看了嗎? – RiggsFolly

回答

3

修復你的數據結構!不要將整數作爲字符串存儲在列表中。爲什麼不?

  • 整數應該存儲爲數字而不是字符串。
  • SQL的字符串處理很差。
  • 應正確聲明外鍵關係。
  • 生成的查詢無法使用索引。
  • SQL有一個很好用於存儲列表的數據結構。它被稱爲「表」。

因此,請使用聯結表。你可以查查看。

有時,我們被其他人的糟糕設計決定困住了。在這種情況下,MySQL有find_in_set()

SELECT p.*, a.path 
FROM db_products p INNER JOIN 
    db_assets a 
    ON a.guid = p.guid 
WHERE p.pcId = 1 AND 
     FIND_IN_SET(:locationId, p.locationId) > 0 
ORDER BY p.id; 
+0

你是絕對正確的,但我必須這樣做:(你的答案有效。 –