2015-03-25 18 views
2

這一個讓我難住。我試圖從一個有公司數據的表格中創建一個報告,其中包括兩列可以有多個值的列。例如: 一家公司可歸類爲一組或多組:使用PHP/MySQL,我如何從多列值內容的表中選擇

部門:金;貴金屬;鑽石; ... 行業:採礦;精製;營銷; ...

我需要按部門/行業生產的公司的字母表列表。我的第一個辦法是做這樣的事情:

$request = "SELECT sector, industry, name, uid FROM colist ORDER BY LOWER(industry),LOWER(sector) ASC" ; 

但是這給了我僅僅由第一多個元件的排列結果。因此,通過工業結構級聯視圖看起來像這樣在頂層: view

在這個例子中,它不會爆炸,有多個值到單獨的條目(燃氣公用事業/中游 - 石油和天然氣)的行和(Gold Mining/Gold & Silver)和(Generic Pharmaceutical/Specialty Pharmaceutical)。

爲了讓它更難,我需要能夠按字母順序選擇一個範圍,否則視圖對用戶來說難以管理。同樣在這個例子中,如果我選擇字母M,那麼在列表中前面顯示Gas Utilities的公司條目不會顯示。

是否可以解決。任何想法將不勝感激。

+0

需要正確的解釋 – 2015-03-25 12:17:04

+0

你還需要什麼。我在詢問如何從多值字段中的所有值中進行選擇。 – 2015-03-25 12:34:14

+0

所以你需要找到部門和行業都開始字母G(例如)? – q0re 2015-03-25 12:45:27

回答

-1

首先澄清問題...因爲沒有人可以嘗試回答。我的數據庫包含有關公司業務活動的信息,這些信息需要在報告中分類。數據元素之一是從複選框中的可能值列表中選擇的。例如,一家公司可以分爲幾個不同的領域(比如說黃金礦業,鍊金,勘探,金屬)。接下來,我需要抽取所有公司的字母表(逐字母),由業務活動選定。

解決方法我嘗試工作,但只有活動列表中的第一個元素。使用該示例,如果我查找以字母「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 ......如果它是後續元素。

最後,明白了。希望這可以幫助別人。

+0

更好的解決方法是正確地標準化表格。在您的查詢站立之後,您將永遠無法優化它以利用索引。 – 2015-03-30 15:29:26

相關問題