2016-10-20 24 views
0

如何選擇使用PHP搜索標籤的mysqli?如何選擇使用PHP搜索標籤的mysqli?

我有表:這樣

___________________________________________ 
|_id_|_______name_______|________tag________| 
| 1 |  dog  | animal,pet,dog | 
| 2 |  donuts  | food,donuts | 
| 3 |  BMW  |   car  | 
| 4 |  football  |  sport  | 
| 5 |  ferrari  | car,supercar | 

和選擇

$query = "SELECT * FROM test WHERE tag = '$_GET[tag]' order by id desc"; 

這是mysqli的PHP代碼測試然後,我通過這個網址

www.example.com/search_tag.php?tag=car 

測試我的代碼,但它將只顯示行號3,如何選擇顯示行號35

+2

更好地規範化您的數據。暫時你可以使用'FIND_IN_SET',比如'... WHERE FIND_IN_SET(your_input_tag,tag)> 0 ...'。必須爲你閱讀[**存儲分隔列表真的很糟糕嗎?**](http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really -that-bad) – 1000111

+0

像這樣'$ query =「SELECT * FROM test WHERE FIND_IN_SET($ _ GET ['tag'],tag)> 0 order by id desc」;'? –

+0

甚至不打擾與此,修復數據庫結構 – nogad

回答

1

由於@nogad在評論部分提出了建議,請修復您的數據庫結構。我建議分開一個表來存儲每個名字的標籤。

首先,讓我們創建一個表,用於存儲不同的標籤(tags_tb):

tags_id | tags_desc 
--------+---------- 
    1 | animal 
    2 | pet 
    3 | dog 
    4 | food 
    5 | donuts 
    6 | car 
/*** LIST GOES ON ***/ 

然後,創建另一個表用於存儲對象(subject_tb):

subj_id | subj_desc 
--------+---------- 
    1 | dog 
    2 | donuts 
    3 | BMW 
/*** LIST GOES ON ***/ 

然後,創建一個表用於存儲每個主題的相關標籤(selected_tags_tb):

id | subj_id | tags_id 
----+---------+--------- 
    1 | 1 | 1 
    2 | 1 | 2 
    3 | 1 | 3 
    4 | 2 | 4 
    5 | 2 | 5 
    6 | 3 | 6 

所以,當用戶選擇標記(例如,用戶選擇的標記 - animal,即涉及一種標籤的所有受試者將被示出),一個簡單的查詢就能做到:

SELECT b.* 
    FROM selected_tags_tb a 
    LEFT JOIN subject_tb b ON a.subj_id = b.subj_id 
    WHERE a.tags_id = ? 

這種方法將使你的系統變得動態。