在SQL字段中有一个数组。如何系统地显示它?

时间:2012-08-28 02:21:15

标签: php mysql sql codeigniter

我在数据Feed中有一个字段,其中一些值以逗号分隔。对于一条记录,值为:

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表示“门控社区”。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')

有关Active Records Codeigniter的更多信息,请参阅Active Record Class

有关mysql WHERE IN工作原理的详情,请参阅Tutorial

答案 2 :(得分: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用于SELECT数据,或者在网上搜索自己,我建议你自己试试这些例子。 SQL关系对于安全性和许多其他原因而言是好的和必要的。