Динамический выбор столбца в MySQL - PullRequest
2 голосов
/ 07 апреля 2009

Я знаю, как передать один запрос MySQL в другой:

SELECT user_name FROM users WHERE user_id=( SELECT user_id FROM entries WHERE header="foo" );

Из чистого интеллектуального любопытства, как я динамически выбираю столбец или таблицу?

Ex:

SELECT ( 
    SELECT column_name FROM column_names WHERE id = 1 
) FROM ( 
    SELECT table_name FROM table_names WHERE id = 1 
); 

Ответы [ 4 ]

6 голосов
/ 07 апреля 2009

Используйте подготовленное утверждение:

mysql> SET @sql = CONCAT("SELECT ", (SELECT "NOW()"));
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @sql;
+--------------+
| @sql         |
+--------------+
| SELECT NOW() | 
+--------------+
1 row in set (0.00 sec)

mysql> PREPARE stmt FROM @sql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE stmt;
+---------------------+
| NOW()               |
+---------------------+
| 2009-04-06 23:08:31 | 
+---------------------+
1 row in set (0.00 sec)
1 голос
/ 07 апреля 2009

Отвечая на ваш первый вопрос, вы должны узнать, как сделать JOIN в SQL. Объединение является фундаментальной операцией в языке SQL. Также важно понять, как сделать цикл на других языках.

SELECT DISTINCT users.user_name
FROM users JOIN entries USING (user_id)
WHERE entries.header = 'foo';

Что касается вашего второго вопроса, нет, вы не можете сделать имена таблиц или столбцов динамическими внутри одного оператора.

Однако вы можете написать код в своем приложении для построения оператора SQL в виде строки, основанной на поиске имен столбцов и имен таблиц. Затем выполните полученную строку как новый запрос SQL.

1 голос
/ 07 апреля 2009

Я почти уверен, что это невозможно при обычном запросе или просмотре.

0 голосов
/ 07 апреля 2009

Вы можете сделать это, запросив таблицу information_schema.columns.

Сделайте это и проверьте результаты. Я не уверен, что вы пытаетесь сделать, но эта таблица содержит все, что связано с вашими столбцами:

SELECT * FROM information_schema.`COLUMNS` C;

Кстати, я не знаю, как это сделать в одном запросе. Вы должны получить информацию о столбцах, а затем создать новый запрос на вашем языке кодирования, что бы это ни было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...