Вы можете достичь этого с помощью подготовленных инструкций. Ваш запрос будет выглядеть следующим образом:
SELECT
CONCAT('SELECT ',
GROUP_CONCAT(COLUMN_NAME),
' FROM test')
FROM
(SELECT
COLUMN_NAME,
ORDINAL_POSITION
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA='test'
AND
TABLE_NAME='test'
ORDER BY
ORDINAL_POSITION DESC LIMIT 10) AS ord_desc
ORDER BY
ord_desc.ORDINAL_POSITION
-за создаст SQL с содержанием типа:
SELECT date,title FROM test
(в образце выше я имел 2 колонки в пределах выбора, который может быть отрегулирован в этой части: ORDER BY ORDINAL_POSITION DESC LIMIT 10
)
Итак, все, что вам нужно сделать, это подготовить это заявление. В моем случае:
SQL:
mysql> set @sql=(SELECT CONCAT('SELECT ', GROUP_CONCAT(COLUMN_NAME), ' FROM test') FROM (SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='test' ORDER BY ORDINAL_POSITION DESC LIMIT 2) AS ord_desc ORDER BY ord_desc.ORDINAL_POSITION);
Query OK, 0 rows affected (0.02 sec)
Приготовьте:
mysql> prepare stmt from @sql;
Query OK, 0 rows affected (0.00 sec)
Результат:
mysql> execute stmt;
+------------+--------------+
| date | title |
+------------+--------------+
| 2014-02-04 | my event 001 |
| 2014-02-04 | my event 002 |
| 2014-02-05 | my event 003 |
| 2014-02-05 | my event 004 |
| 2014-02-05 | my event 005 |
| 2014-02-07 | my event 006 |
| 2014-02-07 | my event 007 |
+------------+--------------+
7 rows in set (0.00 sec)
Вам нужно динамический запрос. –
@ HamletHakobyan Что бы это было? можете ли вы привести пример? – Shahe
попробуйте посмотреть здесь http://stackoverflow.com/questions/17258970/select-first-n-columns-of-mysql-table – marcosh