2009-04-06 4 views
2

Я знаю, как трубы одного запроса MySQL в другую:Динамический выбор столбца в 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 
); 
+0

Не могли бы вы привести пример с данными примера? Я не могу понять, какой результат вы ожидаете. – Quassnoi

ответ

6

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

 
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) 
+0

Я этого не знал! Милая. – tpdi

+0

Отлично, спасибо. – cwallenpoole

1

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

0

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

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

SELECT * FROM information_schema.`COLUMNS` C; 

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

1

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

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

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

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

+0

Я знал, как это сделать на PHP, но я часто видел, что PHP намного менее эффективен и намного медленнее - особенно если требуется несколько вызовов в БД. – cwallenpoole

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