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

Php 如何从同一select语句中第一个表的列值中选择第二个表的数据?,php,mysql,csv,fopen,fputcsv,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, 0

假设我有这样一个疑问:

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
另一个表有一个操作代码列和一个名为操作文本的描述列。因此,当原始查询通过第一个表获取记录时,它能否使用操作代码编号从操作代码表中获取该操作代码的描述

不确定这是否重要,但它需要适合我正在使用的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

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

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\u data
连接到
operation\u code
上的
second\u table
,然后在我们引入该新字段的语句的
SELECT
部分。请注意,对于
operation\u code
,因为它存在于查询中的两个表中,所以我们必须指定我们想要的
operation\u code
来自
list\u data
表(这两个表都可以工作,因为它是内部联接,但必须指定)。

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

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\u data
连接到
operation\u code
上的
second\u table
,然后在我们引入该新字段的语句的
SELECT
部分。请注意,对于
operation\u code
,因为它存在于查询中的两个表中,所以我们必须指定我们想要的
operation\u code
来自
list\u data
表(由于它是一个内部联接,所以两者都可以工作,但必须指定).

如果您还想满足在同一列中返回操作\u代码和操作\u文本的要求,您可以简单地将这两者连接起来:

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."'

如果您还希望满足在同一列中返回操作\u代码和操作\u文本的要求,您可以简单地将这两者连接起来:

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."'

您需要在操作_code上加入另一个表
,然后您可以访问另一个表的列,只需将您的描述列添加到所选列的列表中。您需要在操作_code
上加入另一个表
,然后您可以访问这些列可以将您的描述列添加到所选列的列表中。嗯,很有趣。谢谢。有没有办法在第二个连接值为空时删除破折号,但在它确实有值时保留破折号?是的,可以使用IFNULL()运算符。嗯,很有趣。谢谢。有没有办法在第二个连接值为空时删除破折号,但在它确实有值时保留破折号?是的,可以使用IFNULL()运算符。