簡體   English   中英

用逗號分隔的ID在MySQL中編寫where子句查詢

[英]write where clause query in MySQL from comma separated IDs

我的帖子表中有很多博客帖子。 假設,

+----+----------------------+-------------------------+
| id | title                | categories              | 
+----+----------------------+-------------------------+
| 1  | title 1              | 234, 235, 243           | 
| 2  | title 2              | 237                     |
| 2  | title 3              | 234, 243                |
+----+----------------------+-------------------------+

現在,我試圖選擇所有類別為243的帖子。我已經嘗試使用FIND_IN_SET函數,如果id是類別字段中的第一個數字,則該函數可以選擇帖子。

我當前的查詢是這樣的SELECT * FROM posts WHERE FIND_IN_SET(235, Category) <> 0 ORDER BY PostId DESC

提前致謝。

您應該知道將類別存儲在這樣的列表中是多么糟糕的主意。 原因如下:

  • 將數字存儲為字符串是不好的。
  • SQL具有相對較差的字符串操作功能。
  • 結果查詢不能使用索引。
  • 無法聲明外鍵約束。

因此,您應該修復數據以使用聯結表。

有時,我們對其他人的錯誤設計決定感到震驚。

在這種情況下,問題將出在列表中。 嘗試這個:

WHERE FIND_IN_SET(235, replace(Category, ' ', '') > 0

或者,或者:

WHERE CONCAT(', ', 235, ', ') LIKE CONCAT('%, ', Category, ', %')

但是,我鼓勵您正確使用關系數據結構並實現聯結表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM