2015-09-18 114 views
0

我有一個提交表,該表有tags字段,我需要在其中搜索。在PHP表中搜索標籤與PHP

的數據被保存在JSON格式的表格,是這樣的:["basic","example","html","chart"]

我試圖找到一種方法來搜索標籤字段中的所有行,但不知道如何可以做到最好這種格式的方式。

用戶提交一個標籤進行搜索,如:html,那麼我需要搜索該標籤的所有行,而沒有太多的開銷。

我知道大多數人用來說:你有什麼嘗試過自己? - 好的,沒什麼。因爲我不知道如何做到這一點,我知道如何在SQL和所有這些搜索。但從未嘗試過這種邏輯。

+0

要試試這個,當數據是在JSON中時它會工作嗎?我想是的,'in'搜索整個領域。 – Convertor

+1

@ aldrin27他有完全相反的情況。他沒有。數據庫中的值不在輸入標記中。 –

+1

@Convertor可能會像或FIND_IN_SET會爲你工作 –

回答

1

沒有這種格式的搜索「最好的辦法」。根本沒有辦法。

難怪你不知道該怎麼做。我會告訴你更多 - 也沒人知道。標籤不應該以json格式存儲。就好像你建了一輛汽車,把車輪放在屋頂上。然後問,如何駕駛它。

您必須先學習數據庫基礎知識。然後以適當的方式創建你的表格。爲標籤製作單獨的表格。將每個存儲在單獨的行上。之後,您將能夠通過常規方式搜索標籤,使用JOIN查詢將相應的記錄附加到結果中。

$sql = "SELECT a.* FROM articles a, tags t WHERE aid=a.id AND tag=?"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array($tag)); 
$data = $stmt->fetchAll(); 
+0

我沒有製造這個系統,我也不會這樣做。但是我的客戶要求我做一個搜索功能,而這正是我所擁有的。所以我想確定沒有一個方法來做到這一點,在重寫他的系統之前。 – Convertor

+0

根據您要搜索的條目數量,您可以使用WHERE LIKE查詢。我用它來搜索5-6000個條目,它運行良好。但是,你會得到不太好的結果,因爲你沒有使用全文搜索的選項。 – Genmais

-2

這很簡單,你可以嘗試使用類似的查詢

SELECT * FROM `post` WHERE `tags` LIKE '%html%'; 

在PHP變量:

$tag = "html"; 
$query = mysql_query("SELECT * FROM `post` WHERE `tags` LIKE '%'.$tag.'%'"); 
1

你應該看看MySQL全文索引。 看一看manual和這Zend Developer article

但你不應該使用全文搜索許多列。 在我的其中一個項目中,我通過串聯在TEXT列中搜索列並將其應用於全文索引。

1

您應該創建另一個表tag,其中的字段爲name,post_id。 我相信這是做搜索功能的最佳解決方案。

如果您沒有創建數據庫表的權限。這取決於你有多少帖子。一些?數百甚至更多?如果沒有大量的帖子表格。您可以將它們全部取出並解碼爲PHP Array,然後使用字符串比較。

或者,也許你可以放棄數據庫的方式,只需要處理一個緩存文件。如果用戶創建/修改帖子,我們只需要寫入緩存。

但是你也可以使用不可靠的方式,在mysql中使用like運算符。