在MySQL

时间:2018-05-08 19:18:59

标签: php mysql sql

我想在查询中选择逗号分隔数据但我有一些问题。 该页面有一个类别列表和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);

1 个答案:

答案 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()可能会在幕后做同样昂贵的事情