2016-12-01 9 views
0

Скажем, у меня есть этот запрос:Как выбрать данные 2-й таблицы из значений столбцов 1-й таблицы в одном и том же предложении выбора?

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_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 operation_code', а затем вы получите доступ к столбцам другой таблицы и можете просто добавить столбец описания в список выбранных столбцов. –

ответ

1

Это просто INNER JOIN к этой второй таблице:

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 (либо будет работать, так как это 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

 Смежные вопросы

  • Нет связанных вопросов^_^