Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Дополнительное условие к полю присоеденённому LEFT JOIN

Сообщения:  [1-10]   [11-19] 

 
 автор: Борис   (29.10.2007 в 22:51)   письмо автору
 
   для: oradev   (29.10.2007 в 09:52)
 

Спасибо теперь всё идеально=). Вопросов нету, хотя были - но уже проштудировал материал про устранение дублирования.

   
 
 автор: oradev   (29.10.2007 в 09:52)   письмо автору
 
   для: Борис   (28.10.2007 в 22:03)
 

Борис, ваш запрос:

SELECT u.name_surname,sum(o.value_paid)/count(distinct o2.id) AS sum_oplaty, count(DISTINCT o
      .id) AS cn_order_paid,count(DISTINCT o2.id)AS cn_order
  FROM    users AS u LEFT JOIN orders AS o
             ON (u.id = o.user_id AND o.value_paid = o.order_value)
       LEFT JOIN
          orders AS o2
       ON (u.id = o2.user_id)
 GROUP BY u.id,u.name_surname
 HAVING sum_oplaty > 1000 and cn_order_paid > 1 and cn_order > 1;


Что не ясно, обращайтесь поясню.

   
 
 автор: Борис   (29.10.2007 в 02:21)   письмо автору
 
   для: Борис   (28.10.2007 в 22:03)
 

SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
GROUP BY u.id
HAVING order_paid>1
AND value_paid>1000
ORDER BY id DESC

проблема с условиями для sum, count решилась используя HAVING, осталось вытащить к-во сделанных заказов(не важно оплаченных или нет).

   
 
 автор: Борис   (28.10.2007 в 22:03)   письмо автору
 
   для: oradev   (28.10.2007 в 21:50)
 

1) WHERE value_paid>1000 где общая сумма заказов пользователя больще 1000

2) WHERE order_paid>1 где к-во оплаченных заказов больше одного

3) WHERE order_count>1 где к-во заказов больше одного(не важно оплаченных или нет)
P.S (order_count ) не знаю как вытащить к-во заказов(не важно оплаченных или нет) в связке с оплаченной суммой пользователя и к-вом оплаченных заказов

P.P.S. Оффтоп, хотелось бы узнать название толкового туториала по SQL, MYSQL где теория подверждается примерами(кроме официально мануала), рыть гугл в решении данной задачи для меня гиблое дело..=(.

   
 
 автор: oradev   (28.10.2007 в 21:50)   письмо автору
 
   для: Борис   (28.10.2007 в 21:34)
 

Борис, все элементарно выполняется скажите условие

WHERE value_paid>1000


Что означает - где стоимость заказа конкретного! > 1000 для пользователя
или общая уже сумма заказов пользователя.
Скажите, как трактовать, я вам напишу запрос !

   
 
 автор: Борис   (28.10.2007 в 21:34)   письмо автору
 
   для: Борис   (28.10.2007 в 21:17)
 

Также, если данный запрос возвращает верные данные

SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE value_paid>1000
GROUP BY u.id
ORDER BY id DESC

То следующий запрос возвращает ошибку:

SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE order_paid>1
GROUP BY u.id
ORDER BY id DESC

#1054 - Unknown column 'order_paid' in 'where clause'

   
 
 автор: Борис   (28.10.2007 в 21:17)   письмо автору
 
   для: Борис   (28.10.2007 в 20:46)
 

Хммм, теперь хочу получить помимо к-ва оплаченных заказов, к-во общих заказов не зависимо от o.value_paid = o.order_value, делаю дополнительную связь в итоге получается билиберда...
SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid, count( o2.id ) AS order_count
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
LEFT JOIN orders AS o2 ON ( u.id = o2.user_id )
GROUP BY u.id
ORDER BY id DESC

   
 
 автор: Борис   (28.10.2007 в 20:46)   письмо автору
 
   для: oradev   (28.10.2007 в 19:31)
 

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

SELECT u .name_surname , sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_count
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE o.value_paid >15000
GROUP BY u.id
ORDER BY order_count DESC
LIMIT 0 , 30

   
 
 автор: oradev   (28.10.2007 в 19:31)   письмо автору
 
   для: Борис   (28.10.2007 в 19:10)
 

Борис, вы мой запрос запускали ?

   
 
 автор: Борис   (28.10.2007 в 19:10)   письмо автору
 
   для: oradev   (28.10.2007 в 10:49)
 

Так в догонку, решилась проблема с ORDER BY, далее при разработке возникла новая проблема. Если подставляю условие WHERE к подзапросу выдаётся ошибка. Как задать условие where к результатам подзапроса? Спасибо!
SELECT (

@this_id := users.id
) AS this_id, users . * ,
(
SELECT SUM( value_paid )
FROM orders
WHERE id = @this_id
) AS value_paid

FROM users

WHERE value_paid >=1000
ORDER BY id DESC
LIMIT 0 , 30

   

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования