DISTINCT逗号分隔的SQL表行

时间:2017-06-01 11:41:35

标签: php sql json

我有一个b_topics表,其中包含多行标记列

id | tags 
1  | Joshua, Janet, Hannah
2  | Glory, Jon,  Celina, Johanna
3  | Bridge,Terry, Sterling
4  | Daniel, Florence, Joanne

我想检查输入Jo的相关标签,所以我有以下sql select

$query = Jo; 
$sql = mysql_query("SELECT DISTINCT tags FROM b_topics WHERE tags LIKE '%{$query}%'"); 

while ($row = mysql_fetch_array($sql)) { 
$array[] = array ( 'label' => $row['tags'], 'value' => $row['tags'], ); 
} 
echo json_encode ($array);

这是输出:

[{"label":"Joshua, Janet, Hannah","value":"Joshua, Janet, Hannah"},{"label":"Glory, Jon, Glory","value":"Glory, Jon, Glory"},{"label":"Daniel, Florence, Joanne","value":"Daniel, Florence, Joanne"}]

我希望匹配的单词在foreach();

预期产量: [{"label":"Joshua","value":"Joshua"},{"label":"Jon","value":"Jon"},{"label":"Johanna","value":"Johanna"},{"label":"Joanne","value":"Joanne"}]

3 个答案:

答案 0 :(得分:1)

修复您的数据结构!您不应该在字符串分隔列表中存储多个值。这根本不是存储数据的正确方法。 SQL具有用于存储列表的这种出色的数据结构。它不被称为"字符串"。它被称为" table"。您需要一个名为TopicTags的表,每个主题和每个标记占一行。

虽然你可以使用讨厌的字符串函数来获得你想要的东西,但是使用正确的数据结构会更简单:

select topic_id, tag
from TopicTags tt
where tag like '%Jo%';

如果您希望以特定格式显示结果,则可以汇总。

答案 1 :(得分:0)

设置表格,因为当您的查询返回一行时,您可以将该行存储为不仅仅是一个标记。 $ array [] = array(' label' => $ row [' tags'],' value' => $ row [' tags& #39;],);

其中$ row ['标签'] = Joshua,Janet,Hannah所以它的结果就像       '标签' =" Joshua,Janet,Hannah"

答案 2 :(得分:0)

$ sql =“select * from test where where tag'%Jo%'”;

$ res = mysqli_query($ con,$ sql);

$ string ='';

而($行= mysqli_fetch_array($ RES)){

$ string。=','。$ row ['tags']; }

$ array = explode(',',$ string);

$ search = preg_quote('Jo','〜'); //不要忘记引用输入字符串!

$ result = preg_grep('〜'。$ search。'〜',$ array);

的print_r($结果);