1

我在数据馈送中有一个字段,其中包含一些用逗号分隔的值。对于一条记录,值为:

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 的意思是“封闭社区”。

4

3 回答 3

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
于 2012-08-28T02:24:57.553 回答
2

由于您已标记 codeigniter,您可以使用内置Active Record's方法$this->db->where_in();来获取描述。例如考虑下面的代码

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

有关参考Active Record 类Active Records的更多信息Codeigniter

有关如何mysql WHERE IN工作的更多信息,请参阅教程

于 2012-08-28T02:33:02.750 回答
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 关系是好的和必要的。

于 2012-08-28T04:18:39.767 回答