【发布时间】:2020-04-10 14:34:44
【问题描述】:
这不是重复的,因为我已经尝试了在这里找到的所有解决方案。我什至不知道如何在标题中包含我的问题。
我在列中有数值:
+-----------+
| tags |
+-----------+
| 1,14 |
| 2,3 |
| 2,4 |
| 1,14 |
| 2,3,4 |
| 1 |
| 9 |
| 1,2,15,16 |
| 1,3,17 |
| 1,18 |
| 2,3,4 |
| 20,21 |
+-----------+
例如,我想选择标签 = 1 的帖子。
如果我这样做
"SELECT * FROM articles WHERE tags LIKE '%1%'";
MySQL 将返回所有标记为:14、15、16、21...任何其他数字的帖子,其中包含“1”;
我一直在尝试很多没有给我任何东西的陈述,例如:
$result = $this->db->query("SELECT * FROM articles WHERE CONCAT(',', tags, ',') LIKE ? ORDER BY date_pub DESC LIMIT 4", "%,$tag_id,%")->fetchAll();
等;
不幸的是,每次我都面临同样的结果。 MySQL 返回所有包含“1”的数字。
换句话说,1、13、127494849040450、3900000000000001,MySQL 看到“1”的任何地方都会返回文章。
但我的目标是从逗号分隔的 VARCHAR 字符串中获取唯一的 number 并返回具有此类 numeric 标签的文章。
如果有人可以帮助我解决这个问题,我将不胜感激。
【问题讨论】:
-
但是,我还是想找到一个解决方案。
-
虽然@David 是正确的,但中间步骤是使用
delimiter值始终出现在数字之前和之后,无论如何,所以1变为,1,和@987654327 @ 变为,2,3,4,然后您可以在 LIKE 子句中简单地使用该分隔符 -
我不明白这个问题 - 如果任何标签 = 1,您是否想要标签中的所有值?然后呢?
标签: mysql