2013-05-04 40 views
1

我在PHP中有一個字符串數組,名爲。根據用戶輸入,該數組看起來像這樣:groups [All,Sales]基於字符串數組的過濾記錄PHP和MySQL

實施例:(更新後的表SCHEMA)

groups[] = ['Sales', 'All'] 

      ANNOUNCEMENT 
|description|masterID| groupName | 
======================================= 
| hello  | 1  | All, Final, | 
| greetings | 2  | Sales, All, | 
| demo  | 3  | Final,  | 

因此,從上表中它應僅返回 「你好」 和 「問候」 爲輸出因爲基團[]具有銷售全部作爲行1具有所有和行2都有。請幫忙。我是SQL和PHP的業餘愛好者。

我目前的嘗試:

SELECT * FROM announcement WHERE groupName REGEXP '(Sales | All)' 

輸出:

No rows affected 
+3

切勿在數據庫中存儲逗號分隔值。要檢索它們,您需要通過LIKE「%Final%」進行全文搜索。 – sashkello 2013-05-04 12:47:31

+2

我會建議規範化你的數據庫。用組名創建一個新表,並使用masterID和groupId創建另一個表。這會讓你的生活更輕鬆。 – 2013-05-04 12:48:49

+0

感謝您的所有建議,但這是我必須與之合作。不能改變它,否則我會輕鬆解決這個問題。你能告訴我一個方法來處理這個嗎? – 2013-05-04 12:51:16

回答

3
  1. 我猜,你的羣體確實應該在字符串格式:groups[] = ['Final', 'All', 'Test']

  2. 這個$search = implode('|', $groups)將產生一個字符串Final|All|Test

  3. 現在您需要將此字符串放入您的查詢中,以便通過任一單詞或單詞進行搜索。所以,這是WHERE groupName REGEXP '({$search})'。不要忘記查詢內部的引號,以便它們不會與引用整個查詢的引號衝突。

+0

現在就試試這個:) – 2013-05-05 14:01:57

+0

我改變了我的表模式,使它成爲:'| description | masterID | groupName |'。請檢查我上面更新的問題。 – 2013-05-05 15:08:55

+0

我試過REGEXP,它返回0條記錄:( – 2013-05-05 15:19:43

1

MySQL不會把類似Perl的正則表達式。構建類似這樣的查詢:

SELECT description 
    FROM announcement NATURAL JOIN master 
WHERE groupName REGEXP '\\b(Final|All|Test)\\b'; 
+0

但是,如何獲得REGEXP之間的每個組數組元素? – 2013-05-04 13:02:43

+0

我把它當做練習 - 但是像'$ query ='SELECT ... REGEXP \'\\\\ b('。implode('|',$ groups)。')\\\\ b \ '''會起作用。 – LHMathies 2013-05-04 13:29:29

+0

我很漂亮業餘。雖然我正在谷歌上搜索如何做到這一點,但如果你能讓我完成,我會很感激你。 – 2013-05-04 19:18:12