2015-07-31 3 views
0

У меня есть код, который выбирает 10 пользователей, которые «заработали» денежный перевод по цене desc. Я использую этот запросвыбор и заказ из 3 разных таблиц в mysql

SELECT products.seller, 
SUM(products.price * (1 - reseller.fee/100)), 
COUNT(*) 
FROM products 
INNER JOIN reseller ON reseller.username = products.seller 
WHERE (products.seller!= 'MYSITE') 
AND products.sold=1 
AND products.sellerpaid=0 
AND products.username != 'None' 
GROUP BY products.seller 
ORDER BY SUM(products.price * (1 - reseller.fee/100)) DESC 
LIMIT 10 

К этому я получаю:

uploaded_by SUM() COUNT() 
username 10.00  2 
username1 11.00  3 

.... 

, который работает абсолютно нормально, , но теперь у меня есть еще один стол, продукция1 и содержит нечто большее, то почему я не могу объединить их, поэтому я хочу получить те же результаты, что и в первом, но и получить цену всех продуктов из этой таблицы. Я пробовал LEFT JOIN, RIGHT JOIN и многие другие, но все же не могу сделать это правильно.

Пожалуйста, не говорите мне, чтобы узнать больше о объединениях, потому что у меня уже есть, просто не могу это сделать, если вы можете придумать решения, тогда опубликуйте их, если это возможно.

Также, если есть что-то, что вы не понимаете, прокомментируйте, чтобы я мог дать дополнительные объяснения.

спасибо.

+0

Можете привести пример данных, которые вы хотите получить? – paskl

+0

Какова связь между 'продуктами' и' продуктами1'? Если они взаимно однозначны, вы можете просто использовать «INNER JOIN» для извлечения информации из него. – Barmar

+0

Право, я забыл сказать, его же дату, продавец, count() и цена Предложение WHERE должно быть таким же. – Lesii

ответ

1

Fokker

Если я не ошибаюсь, вы можете использовать UNION обеих таблиц. Я не знаю, если MySQL поддерживает эту функцию, но SQLServer делает:

SELECT tmp.seller, 
SUM(tmp.price * (1 - tmp.fee/100)), 
COUNT(*) 
FROM (select p.seller, p.price, r.fee from products p 
INNER JOIN reseller r ON r.username = p.seller 
WHERE (p.seller!= 'MYSITE') 
AND p.sold=1 
AND p.sellerpaid=0 
AND p.username != 'None' 
UNION ALL 
select p1.seller, p1.price, r1.fee from products p1 
INNER JOIN reseller r1 ON r1.username = p1.seller 
WHERE (p1.seller!= 'MYSITE') 
AND p1.sold=1 
AND p1.sellerpaid=0 
AND p1.username != 'None') tmp 
GROUP BY tmp.seller 
ORDER BY SUM(tmp.price * (1 - tmp.fee/100)) DESC 
LIMIT 10 

Надежда помочь вам

PD. Извините за мой плохой английский hehehehe

+0

Вы, сэр, LIFESAVER. Большое спасибо;) – Lesii

+0

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

+0

Эй, партнер! Почему вы правильно отбираете мой ответ? Я здесь новый, и ты меня ограбил !! Hahahahaha! Я отвечаю на вопрос, который вы задаете, просто попросите объединить информацию с другой таблицей.Я не знаю информацию о ваших таблицах или если у них одинаковый идентификатор (если это так, я уже изменяю ответ с помощью UNION ALL, менее тяжелый, чем запрос, который вы отправили) Верните мой ответ как правильный! ! Hahahahaha! PD: Извините снова за мой плохой английский –

1

Поиграв с некоторыми запросами, мне удалось исправить эту проблему. Решение:

SELECT * FROM (select p.seller, sum(p.price * (1-r.fee/100)) as sumi, count(*) as counti from products p 
INNER JOIN reseller r ON r.username = p.seller 
WHERE (p.seller!= 'MYSITE') 
AND p.sold=1 
AND p.resellerpaid=0 
AND p.username != 'None' 
GROUP BY p.seller 
UNION 
select p1.seller, sum(p1.price * (1-r1.fee/100)) as sumi, count(*) as counti from products1 p1 
INNER JOIN reseller r1 ON r1.username = p1.seller 
WHERE (p1.seller!= 'MYSITE') 
AND p1.sold=1 
AND p1.resellerpaid=0 
AND p1.username != 'None' GROUP BY p1.seller) tmp 
ORDER BY sumi DESC 

Я благодарю @ Херардо-Хирам-ВЕГА-Кабрера Для его ответа, его ответ очень помог мне понять, как работает UNION, я не мог понять, что после прочтения много дерьма найти на Google.

Thanks stackoverflow;)

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