簡體   English   中英

從mysql行返回所有結果,並以逗號分隔,匹配值

[英]return all results from a mysql row seperated by commas matching a value

我有一個包含新聞數據和類別的mysql表,我試圖選擇某個類別中的所有數據。 我沒有想到足夠遠,所以我目前在某個時候不使用標准化表,我可能會回去重新編寫該部分以使用標准化表。

這是我的表結構

+---------+------------+------------+--------+----------+   
| news_id | news_title | news       | cat_id | date     |      
+---------+------------+------------+--------+----------+    
| 1       | title1     | blahblah   |1,2,4,6 |2009-11-24|                    
+---------+------------+------------+--------+----------+
| 2       | new title  | text 123   | 2      |2009-01-24|                    
+---------+------------+------------+--------+----------+ 
| 3       | new title3 | text 3     | 2,19,6 |2009-02-24|                    
+---------+------------+------------+--------+----------+   

假設我要返回類別2的所有結果,而我試圖使用此語句。

$query= mysql_query("SELECT id FROM `news_data` WHERE FIND_IN_SET('" . str_replace(',',"',cat_id) OR FIND_IN_SET('",$cat_id)."',cat_id)") or die(mysql_error());

這將返回新聞ID 2和3的結果,因為它們都以“ 2”開頭。 未選擇第一個新聞ID,因為“ 2”是第二個值。 我知道mysql語句有一些簡單的錯誤,我希望有人能夠幫助我。

謝謝,布魯克

只需刪除find_in_set中數字的引號即可。 為我工作。

" WHERE FIND_IN_SET(" . str_replace(',',",cat_id) OR FIND_IN_SET(",$cat_id).",cat_id)")

另一個很酷的方法:

select id from news_data where cat_id regexp '(^|[^0-9])2([^0-9]|$)';

...可以使用任何定界符/間距。

除了其他出色的答案

這是一個糟糕的設計。 它違反了架構設計的規范化規則之一(第一?第二?我不記得了)。

這是一個多對多的關系,因為它看起來像一個新聞條目可以具有許多類別,並且一個類別可以屬於許多新聞條目。 這樣建模,您將擁有更好的設計。

采用:

 WHERE INSTR(CONCAT(t.cat_id, ','), '2,') > 0

參考:

暫無
暫無

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

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