Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается отсортировать запрос, где ошибка? / 10 сообщений из 10, страница 1 из 1
04.01.2014, 13:00:01
    #38517604
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Доброго всем дня,

Построил вот такой селект:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status, c.customers_groups_id, c.customers_email_address, a.entry_country_id,
								   (SELECT sum(op1.products_quantity * op1.final_price)
									  FROM orders_products op1, orders o1
									 WHERE c.customers_id = o1.customers_id
									   AND o1.orders_id = op1.orders_id
									 GROUP BY c.customers_firstname, c.customers_lastname) AS total_purchased
							  from customers c, address_book a 
							 where c.customers_id = a.customers_id 
							   and c.customers_default_address_id = a.address_book_id
                                                     order by total_purchased desc



Сортировка по любому другому полю работает, а вот по total_purchased нет. Почему?
...
Рейтинг: 0 / 0
04.01.2014, 13:59:58
    #38517625
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Какова цель GROUP BY в подзапросе, если там в результате не допускается более одной записи?
...
Рейтинг: 0 / 0
04.01.2014, 18:23:38
    #38517706
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Без GROUP BY c.customers_firstname, c.customers_lastname вообще запрос зависает!
...
Рейтинг: 0 / 0
04.01.2014, 19:02:22
    #38517718
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
ser79Сортировка по любому другому полю работает, а вот по total_purchased нет.В чем именно выражается "не работает" ?
Покажите план запроса.
...
Рейтинг: 0 / 0
19.04.2014, 21:25:26
    #38619643
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Возвращаюсь к вопросу в топике.

miksoftКакова цель GROUP BY в подзапросе, если там в результате не допускается более одной записи?
В поле total_purchased складывается сумма заказанного товара по каждому покупателю. Заказов по покупателю может быть сколько угодно, поэтому группируем.

Подскажите как правильно организовать запрос!
...
Рейтинг: 0 / 0
20.04.2014, 00:25:29
    #38619693
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Нужно использовать не имя, а порядковый номер поля. В данном случае ORDER BY 8
...
Рейтинг: 0 / 0
20.04.2014, 08:07:46
    #38619721
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
AkinaНужно использовать не имя, а порядковый номер поля. В данном случае ORDER BY 8
Это помогла выполнить запрос. Но вот беда, для таблиц в несколько тысяч записей выполняется он около 10 сек. Что можно оптимизировать?
...
Рейтинг: 0 / 0
20.04.2014, 09:21:47
    #38619729
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
ser79AkinaНужно использовать не имя, а порядковый номер поля. В данном случае ORDER BY 8
Это помогла выполнить запрос. Но вот беда, для таблиц в несколько тысяч записей выполняется он около 10 сек. Что можно оптимизировать?

Сделайте експлейн вашего запроса:

http://habrahabr.ru/post/31129/

поставьте слово EXPLAIN перед вашим запросом и выдайте
сюда результат.

Повторите и выдайте сюда експлаин без GROUP BY.
...
Рейтинг: 0 / 0
20.04.2014, 20:30:06
    #38619868
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
Значит сам запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status, c.customers_groups_id, c.customers_email_address, a.entry_country_id,
								   (SELECT sum(op1.products_quantity * op1.final_price)
									  FROM orders_products op1, orders o1
									 WHERE c.customers_id = o1.customers_id
									   AND o1.orders_id = op1.orders_id
									 GROUP BY o1.customers_id) AS total_purchased
	from customers c, address_book a 
	where c.customers_id = a.customers_id and 
				c.customers_default_address_id = a.address_book_id
	order by 8 desc



его эксплейн:
Код: plaintext
1.
2.
3.
4.
1	PRIMARY	c	ALL	PRIMARY				938	Using filesort
1	PRIMARY	a	eq_ref	PRIMARY,idx_address_book_customers_id	PRIMARY	4	C382104_moto.c.customers_default_address_id	1	Using where
2	DEPENDENT SUBQUERY	op1	ALL					3206	Using temporary; Using filesort
2	DEPENDENT SUBQUERY	o1	eq_ref	PRIMARY	PRIMARY	4	C382104_moto.op1.orders_id	1	Using where


Запрос без group:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
	select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status, c.customers_groups_id, c.customers_email_address, a.entry_country_id,
								   (SELECT sum(op1.products_quantity * op1.final_price)
									  FROM orders_products op1, orders o1
									 WHERE c.customers_id = o1.customers_id
									   AND o1.orders_id = op1.orders_id) AS total_purchased
	from customers c, address_book a 
	where c.customers_id = a.customers_id and 
				c.customers_default_address_id = a.address_book_id
	order by 8 desc



Код: plaintext
1.
2.
3.
4.
1	PRIMARY	c	ALL	PRIMARY				938	Using filesort
1	PRIMARY	a	eq_ref	PRIMARY,idx_address_book_customers_id	PRIMARY	4	C382104_moto.c.customers_default_address_id	1	Using where
2	DEPENDENT SUBQUERY	op1	ALL					3206	
2	DEPENDENT SUBQUERY	o1	eq_ref	PRIMARY	PRIMARY	4	C382104_moto.op1.orders_id	1	Using where
...
Рейтинг: 0 / 0
20.04.2014, 21:12:55
    #38619886
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается отсортировать запрос, где ошибка?
В общем построил такой запрос, который работает шустро. Оцените его правильность:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status, c.customers_groups_id, c.customers_email_address, a.entry_country_id, q1.total_purchased
	from customers c, address_book a LEFT JOIN
(SELECT o1.customers_id, sum(op1.products_quantity * op1.final_price) as total_purchased
	FROM orders_products op1, orders o1
 WHERE o1.orders_id = op1.orders_id
 GROUP BY o1.customers_id) q1
USING (customers_id)
	where c.customers_id = a.customers_id and 
				c.customers_default_address_id = a.address_book_id 
order by total_purchased DESC



Код: plaintext
1.
2.
3.
4.
5.
1	PRIMARY	c	ALL	PRIMARY				3429	Using temporary; Using filesort
1	PRIMARY	a	eq_ref	PRIMARY,idx_address_book_customers_id	PRIMARY	4	C382104_tubes.c.customers_default_address_id	1	Using where
1	PRIMARY	<derived2>	ALL					2170	
2	DERIVED	op1	ALL					8184	Using temporary; Using filesort
2	DERIVED	o1	eq_ref	PRIMARY	PRIMARY	4	C382104_tubes.op1.orders_id	1	
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается отсортировать запрос, где ошибка? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]