2016-12-01 130 views
0

比方说,我有这个疑问:如何从同一个select语句中第一个表的列值中选择第二个表的数据?

SELECT first, last, operation_code, serial_no FROM list_data WHERE cid='".$cid."' 

而且我们说,查询的结果是这样的:

john, smith, 100, 000000001 
john, doe, 200, 000000002 
jane, doe, 300, 000000003 

我想一些数据从不同的表添加到结果。像这样:

john, smith, 100 - description for 100, 000000001 
john, doe, 200 - description for 200, 000000002 
jane, doe, 300 - description for 300, 000000003 

另一个表有一个operation_code列和一个名为operation_text的描述列。因此,当原始查询通过第一个表获取记录时,是否可以使用operation_code编号从operation_codes表中获取该操作代码的描述?

不知道这是否重要,但它需要适应我使用的这种csv文件创建方法。

$output = fopen('php://output', 'w'); 
fputcsv($output, array('first', 'last', 'operation_code', 'serial_no')); 
$rows = mysql_query("SELECT first, last, operation_code, serial_no FROM list_data WHERE cid='".$cid."' ORDER BY last ASC, first ASC"); 
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row); 

所以当csv文件被创建时,我希望代码号和说明在同一列中。在代码和说明之间没有多余的逗号,除非没有其他办法那么它的罚款,如果说明是在它自己的列像这样:

Header line of csv: 
first, last, operation_code, operation_text, serial_no 
body of csv: 
john, smith, 100, description for 100, 000000001 
john, doe, 200, description for 200, 000000002 
jane, doe, 300, description for 300, 000000003 
+0

你会想'JOIN'其他表on ON operation_code',然后你将可以访问另一个表的列,并可以将你的描述列添加到选定列的列表中。 –

回答

1

这只是一个内部联接到第二个表:

SELECT first, last, list_data.operation_code, second_table.operation_text, serial_no 
FROM list_data INNER JOIN second_table ON list_data.operation_code = second_table.operation_code 
WHERE cid='".$cid."' 

在这里,我们加入list_datasecond_tableoperation_code再向上,我们在新的领域带来语句的SELECT部分。请注意,对于operation_code,因为它存在于查询中的两个表中,所以我们必须指定operation_code来自list_data表(由于它是INNER JOIN,因此它必须指定)。

1

如果你想也满足回归在同一列的operation_code和operation_text的要求,你可以简单地串联这两个这样:

SELECT first, last, CONCAT(list_data.operation_code,' - ', second_table.operation_text) AS operation, serial_no 
FROM list_data INNER JOIN second_table ON list_data.operation_code = second_table.operation_code 
WHERE cid='".$cid."' 
+0

嗯,有趣。谢谢。 – leoarce

+0

有没有办法在第二个连接值为空时删除短划线,但是当它有一个值时保留它? – leoarce

+0

是的,你可以使用IFNULL()运算符。 http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html – watermelon