2017-06-01 72 views
-2

我有一个b_topics表标签栏多行DISTINCT逗号分隔SQL表行

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"}]

+1

不,不,不!切勿将多个值存储在单个列中! –

+0

[我会再问一次](https://stackoverflow.com/questions/44306930/select-distinct-comma-separated-sql-table-rows#comment75618897_44306930);这是'$ query = Jo;'你使用的实际语法?你需要回应评论和给出的答案。 –

回答

1

修复你的数据结构!您不应将多个值存储在字符串分隔列表中。这根本不是存储数据的正确方法。 SQL有这个伟大的数据结构来存储列表。它不被称为“字符串”。它被称为“表”。您需要一个名为TopicTags的表格,每个主题和每个标签都有一行。

虽然你可以做讨厌的字符串函数来得到你想要的东西,这将是用正确的数据结构更加简单:

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

如果你想在一个特定格式的结果可以汇总。

+0

他不想'find_in_set',他想要部分匹配。所以'乔'应该匹配'约书亚'和'乔恩'。 – Barmar

+0

他们转贴https:// stackoverflow。com/q/44306930 /我问他们'$ query = Jo'是否是他们在这里使用的实际语法。如果是这种情况,那么需要用引号包装。否则,它会抛出一个未定义的常量错误。 –

0

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

其中$行[ '标签'] =约书亚,珍妮特,汉娜所以它给人造成像 '标签'= “约书亚,珍妮特,汉娜”

0

$ SQL =“从试验中,在标签,如选择* '%乔%'“;

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

$ string ='';

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

$字符串=”, '$行[' 标签]。。 }

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

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

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

print_r($ result);