2017-06-01 68 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);