SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.05.2012 23:34:25

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

UNION ALL работает неверно

Всем привет!
Проблема есть 4 запроса которые нужно вывести. Я сделал 1 запрос с union all с 4 подзапросами. При этом проверил результат работы каждого подзапроса. Если сложить их во едино то результат будет другой а именно он не скалывает их по порядку и как то сортирует.


$sql = "(
            SELECT tovar.rating, ROUND(t.suma/tovar.massa, 2) as suma_tovar, t.suma, tovar.massa, tovar.id as tovar_id, t.is_confrim
            FROM `tovar` tovar
            JOIN price_top t ON t.tovar_id=tovar.id
            WHERE t.is_confrim=1
            "
. $strWhereCategor . "
            ORDER BY suma_tovar ASC
            ) UNION ALL
            (
            SELECT tovar.rating, ROUND(t.suma/tovar.massa, 2) as suma_tovar, t.suma, tovar.massa, tovar.id as tovar_id ,t.is_confrim
            FROM `tovar` tovar
            JOIN price_top t ON t.tovar_id=tovar.id
            WHERE t.is_confrim=0
            "
. $strWhereCategor . "
            and ( week(NOW())-week(`date_cr`) )<3
            ORDER BY suma_tovar ASC
            ) UNION ALL
            (
            SELECT tovar.rating, ROUND(t.suma/tovar.massa, 2) as suma_tovar, t.suma, tovar.massa, tovar.id as tovar_id ,t.is_confrim
            FROM `tovar` tovar
            JOIN price_top t ON t.tovar_id=tovar.id
            WHERE t.is_confrim=0
            "
. $strWhereCategor . "
            and ( week(NOW())-week(`date_cr`) )>2
            ORDER BY suma_tovar ASC
            ) UNION ALL
            (
            SELECT tovar.rating, tovar.suma as suma_tovar, 0 as suma, tovar.massa, tovar.id as tovar_id ,3 as is_confrim
            FROM `tovar` tovar
            LEFT JOIN price_top t ON t.tovar_id=tovar.id
            WHERE t.tovar_id IS NULL
            "
. $strWhereCategorNULL . "
            )
        "
;
 


В чем может быть проблема мне нужно получить все записи именно в том порядке как я сделал запросы. Пример
1 запрос вернул - 1 2 3 4 7
2 запрос вернул - 8 5 10 29
3 запрос вернул - 20 21 19 18
4 запрос вернул - 17 16 15 24

в итоге он должен вернуть
1 2 3 4 7   8 5 10 29  20 21 19 18  17 16 15 24

Неактивен

 

#2 01.06.2012 00:41:03

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: UNION ALL работает неверно

SELECT
    t.id as price_id,
        tovar.rating,
        ROUND(t.suma/tovar.massa, 2) as suma_tovar,
        t.suma, tovar.massa,
        tovar.id as tovar_id,
        t.is_confrim
        FROM `tovar` tovar JOIN price t ON t.tovar_id=tovar.id
        " . $strWhereCategor . "
    ORDER BY
    IF( t.is_confrim=0, 1, 2),
    IF( week(NOW())-week(`date_cr`) <3, 3, 4),
    suma_tovar DESC

Решило все проблемы )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson