我有一个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"}]
答案 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($结果);