![](/img/trans.png)
[英]How can i retrive all value seperated by comma in sentense from mysql database?
[英]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]|$)';
...可以使用任何定界符/間距。
除了其他出色的答案
這是一個糟糕的設計。 它違反了架構設計的規范化規則之一(第一?第二?我不記得了)。
這是一個多對多的關系,因為它看起來像一個新聞條目可以具有許多類別,並且一個類別可以屬於許多新聞條目。 這樣建模,您將擁有更好的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.