[英]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.