我想在查询中选择逗号分隔数据但我有一些问题。 该页面有一个类别列表和uniq id。 类别链接如下;
<a href="index.php?page=categories&cat=1">Books</a>
我正在使用$_GET
“cat”ID并列出匹配用户。
我的问题是,当点击cat = 1时,其列出的所有用户类别中都有1个。像id 1和11和15一样。
这是我的用户表及其选定的类别。
| User | Categories |
+----------------+------------+
| Jhon Doe | 1,5,11 |
这是查询;
$catid=$_GET['cat'];
$list=$db->query("
SELECT * FROM users
WHERE categories
LIKE '%$catid%'")->fetchAll(PDO::FETCH_ASSOC);
答案 0 :(得分:0)
在SQL中的字段中放置值列表几乎总是一个坏主意;这也不例外。由于您的列表格式很好,您只需要利用它...请记住,除了非常小的数据库之外,这个查询将非常慢。
WHERE categories = '$catid' -- only item
OR categories LIKE '$catid,%' -- first item
OR categories LIKE '%,$catid' -- last item
OR categories LIKE '%,$catid,%' -- somewhere in the middle
;
编辑:上面针对实际列表格式进行了更正;正如tadman在评论中所说,当你的格式被它接受时,FIND_IN_SET()会更简洁(这就是这个)...记住,FIND_IN_SET()可能会在幕后做同样昂贵的事情