[mysql]UNION - найдите ошибку

iakobi91

SELECT m.password as m.name, m.id, m.posts, m.joined, m.mgroup, m.email,m.title, m.hide_email, m.location, m.aim_name, m.icq_number, me.photo_location, me.photo_type, me.photo_dimensions FROM amembers m LEFT JOIN amember_extra me ON me.id=m.id LEFT JOIN agroups g ON m.mgroup=g.g_id WHERE m.id > 0 AND m.mgroup='1' AND g.g_hide_from_list <> 1 ORDER BY m.name asc LIMIT 0, 30
UNION
SELECT m.password as m.name, m.id, m.posts, m.joined, m.mgroup, m.email,m.title, m.hide_email, m.location, m.aim_name, m.icq_number, me.photo_location, me.photo_type, me.photo_dimensions FROM amembers m LEFT JOIN amember_extra me ON me.id=m.id LEFT JOIN agroups g ON m.mgroup=g.g_id WHERE m.id > 0 AND m.mgroup='1' AND g.g_hide_from_list <> 1 ORDER BY m.name asc LIMIT 0, 30
Объединяем два одинаковых запроса, но мускуль выдает ошибку неверного использования union и order by

Boris1980

ORDER BY должен быть один и в конце.

iakobi91

а если надо два запроса по разным полям ордерить? Две схожие таблицы, в одной по date1, в другой по date2?

kruzer25

Неправда

kruzer25

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

kruzer25

amembers m
Ужас

iakobi91

ламаим ипб)

Boris1980

Добавь фиктивный столбец query_id в запросы (для каждого запроса он константа сначала отсортируй по нему а потом по нужным тебе полям.

iakobi91

А если объединять селект и апдейт?

Boris1980

Можешь привести пример такой конструкции еще и с Union?
Первая проблема у тебя решилась, а так понимаю?

iakobi91

неа
Пример:
select * from news order by timestamp desc limit 0, 25
union
update news set name = 'sss' where id = 123

oleg701

select * from news
union
update news set name = 'sss' where id = 123
Папа, это ты с кем сейчас разговаривал?
Ты вообще как представляешь себе результат операции update?

Boris1980

Мое решение не помогло что ли?
И в какой ситуации нужно именно такое решение? Почему бы не провести операцию в два действия?

Boris1980

Подозреваю, что не представляет.

iakobi91

Да я к ипб подход ищу. Панятно, что это нахуй никто не юзает.
Хотя бы теоретически возможно такое объединение?

Andbar

ты union с ; не путаешь?

Andbar

Признавайся, через что mysql-injection собрался делать?

oleg701

Объединять можно только наборы записей (record set).
Наборы возвращает только операция select, поэтому такое даже теоретически не прокатит.
А стандартные дырки не подходят?
Или ты хорошо пропатченный форум сломать хочешь?

Boris1980

По другому вообще то подрят запросы к базе пускаются.
Поищи статейки в нете на этот счет.

iakobi91

утютю. Не путаю

iakobi91

Кароче, первый запрос (до юниона) в первом треде зашит в коде, юнион и остальное можно через $_GET отправить. Но при этом мускуль ругается на ордер бай и юнион, как я и говорил. Задача тупая - вытащить пароль админа или запихнуть себя в админскую группу.
Делаю исключительно ради личного удовлетворения, нашел форум, где это по-идее должно прокатывать

Boris1980

ты union с ; не путаешь?
Похоже на то. Но думаю, все более менее раскрученные движки форумов (а ломает он ИПБ) устойчивы к такого рода выкрутасам.

Boris1980

Уже попробовал что ли? Не подошло?

iakobi91

ругаеццо мускуль. Код вставить можно (иначе б не ругался только вот как обойти фичу с ордером?
А в пхп нет выполнения нескольких запросов через ; Тока один, поэтому кроме юниона ниче выдумать не могу

kruzer25

Но думаю, все более менее раскрученные движки форумов (а ломает он ИПБ) устойчивы к такого рода выкрутасам
Более того, в современных php-шных библиотеках для работы с БД в принципе нельзя через один ***_query отправить несколько запросов.

Dasar

сделай так:
select * from m where m.id in (select id from m.id > 0 AND m.mgroup='1' AND g.g_hide_from_list <> 1 ORDER BY m.name asc LIMIT 0, 30)
union
select * from m where m.id in (select id from m.id > 0 AND m.mgroup='1' AND g.g_hide_from_list <> 1 ORDER BY m.name asc LIMIT 0, 30)

iakobi91

Нельзя там скобки - первый запрос не меняется совсем

kruzer25

Всё-таки, а если второй запрос целиком заключить в скобки?

iakobi91

не выходит

kruzer25

А что говорит?

evgen5555

После "лимит" нельзя "юнион" вставлять.

evgen5555

И ваще - через тычки на морде дыру ты хрен найдешь. Всё уже исхожено и изгажено лет пять назад.
Надо через кукисы рыть, думаю, там есть приколы

kruzer25

http://dev.mysql.com/doc/refman/5.1/en/union.html
Можно вставлять, только запрос надо в скобки взять.

pitrik2

Можно вставлять, только запрос надо в скобки взять.
ну блин
ну разговор ни о чем ведете
НЕ МОЖЕТ ОН ПОСТАВИТЬ ОТКРЫВАЮЩУЮСЯ СКОБКУ ВНАЧАЛЕ!
весь тред бессмысленен

iakobi91

+1
Я о том же. Хуй вскроешь. Через кукисы че-то не выходит.
Оставить комментарий
Имя или ник:
Комментарий: