首先澄清問題...因爲沒有人可以嘗試回答。我的數據庫包含有關公司業務活動的信息,這些信息需要在報告中分類。數據元素之一是從複選框中的可能值列表中選擇的。例如,一家公司可以分爲幾個不同的領域(比如說黃金礦業,鍊金,勘探,金屬)。接下來,我需要抽取所有公司的字母表(逐字母),由業務活動選定。
解決方法我嘗試工作,但只有活動列表中的第一個元素。使用該示例,如果我查找以字母「G」開頭的活動,它將返回公司,因爲該列確實以字母「G」開頭,但如果我查找字母「E」,則不會找到該公司,因爲該列不是以字母「E」開始,即使公司確實將其歸類爲「Exploration」。
答案是......行中的一列可以用作數組來存儲多個值,但是隻有程序員的代碼創建和讀取它知道SQL不是瞭解數組 - 對於SQL行/列的內容只是一串字符使用上面的例子,儘管我認爲數據是數組中單獨元素的列表,如下所示:
Gold Mining
Gold Refining
Exploration
Metals
到SQL,只是看起來像Gold Mining,Gold Refining,Exploration,Metals
,所以沒有邏輯可以直接應用。
但是,只要謹慎使用正確的分隔符(並且逗號是一個非常糟糕的選擇),那麼即使SQL不知道它,也可以使用一些SQL代碼來查找數組中的所有元素。
使用特殊字符%和LIKE一起使用,可以匹配您知道分隔元素的模式。使用一個更好的例子,如果你創建一個更專業的分隔符,最好是一個永遠不會在你的文本中使用的分隔符,那麼事情就會起作用。拿我的舊名單,並添加一個更具體的分隔符,你會看到文字看起來像Gold Mining~Gold Refining~Exploration~Metals
。在我自己的代碼,我可以從這個創建一個數組,並處理它什麼辦法,我想,這樣的...
$chosen = explode("~" , $row['industry']) ;foreach ($chosen as $choice){...do something};
我們分別選擇字符串中的每個元素,你需要告訴SQL尋找什麼對於作爲分隔符,像這樣......
$request = "SELECT sector, industry, company_id, name, stat FROM companies WHERE isopen <> '' AND (industry LIKE '". $sk . "%' OR industry LIKE '%;". $sk . "%' ORDER BY LOWER(industry),LOWER(sector) ASC" ;}
$ SK的代碼是一個單字母,用戶可以從字母表挑,說明行業的首個字母是什麼。
必要的部分是告訴SQL尋找包含分隔符的模式。使用查找字母「E」的示例,它可以有兩種形式:E ......如果它是「數組」中的第一個元素,或者...... E ......如果它是後續元素。
最後,明白了。希望這可以幫助別人。
需要正確的解釋 – 2015-03-25 12:17:04
你還需要什麼。我在詢問如何從多值字段中的所有值中進行選擇。 – 2015-03-25 12:34:14
所以你需要找到部門和行業都開始字母G(例如)? – q0re 2015-03-25 12:45:27