如何从同一个select语句中第一个表的列值中选择第二个表的数据?

时间:2016-12-01 18:25:27

标签: php mysql csv fopen fputcsv

假设我有这个问题:

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

2 个答案:

答案 0 :(得分: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_data加入second_table operation_code,然后加入我们在新字段中引用的语句的SELECT部分。请注意,对于operation_code因为它存在于查询中的两个表中,我们必须指定我们想要的operation_code来自list_data表(要么是因为它是内部的,所以加入,但必须指定)。

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