2012-08-28 50 views
1

我在數據饋送中有一個字段,其中的某些值以逗號分隔。對於一條記錄,其值爲:在SQL字段中有一個數組。如何系統地顯示它?

A06,C05,C06,C15,C18,C19,C21,C22,E05,E22,G11,J02,J07,L04,L07,M01,M05,N03,N07,N10,N11,N12,N18,N19,N20,N24,O02,O03,O04,O06,O09,O14,O15,O16,O20,O21,O31,Q01,Q04,Q08,R07,S08,T08,T12,T23,T32,U01,U03,U04,U06,U13,W09,W11,W16,W19,W30,W45,X02,X03,X12,Z07 

我有一個單獨的表,其中包含一些關於每個代碼的含義的說明。當我查詢主表並將該字段名稱作爲值時,我可以使用explode將其獲取到數組中,並使用foreach循環來輸出每個值。

問題是,我想顯示存儲在另一個表中的描述。迭代通過這種方式在列表中顯示這些值的正確方法是什麼?

作爲一個例子,C21的意思是「封閉社區」。

+0

如果你覺得它們有用,爲什麼不考慮接受你過去的幾個問題? – Deepak

回答

2

您可以使用FIND_IN_SET()功能。

爲例,用戶使用這樣的

Orders Table 
------------------------------------ 
OrderID  |  attachedCompanyIDs 
------------------------------------ 
    1      1,2,3    -- comma separated values 
    2      2,4  

Company Table 
-------------------------------------- 
CompanyID  |  name 
-------------------------------------- 
    1     Company 1 
    2     Another Company 
    3     StackOverflow 
    4     Nothing 

記錄功能

SELECT name 
FROM orders, company 
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs) 

將導致

name 
--------------- 
Company 1 
Another Company 
StackOverflow 
+0

我相信OP也打算將拆分記錄匹配到另一個表。我覺得你的回答並沒有清楚地表明這一點。 – Kermit

2

正如您已經標記了codeigniter,您可以使用內置的Active Record's方法$this->db->where_in();來獲取描述。例如,考慮下面

 
$codes = array('A06', 'C05', 'C06'); 
$this->db->where_in('description', $codes); 
// Produces: WHERE codes IN ('A06', 'C05', 'C06') 

代碼有關的詳細信息的CodeigniterActive Records參考Active Record Class

欲瞭解更多有關mysqlWHERE IN作品如何引用Tutorial

0

只是爲了遵循書籍,最好的方法在SQL語言中這樣做是爲了使用這種關係。

對於理解這個,我建議你閱讀這篇論文簡單http://net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-relationships/ 也許這http://www.informit.com/articles/article.aspx?p=30875&seqNum=5的選擇數據,或者搜索自己在網絡上,我建議你去嘗試自己的例子。 SQL關係對於安全性和其他許多原因而言,這是好的和必要的

相關問題