MySQL help: Как найти все заказы от клиента до цены <= 20 и статуса «неоплаченный» - PullRequest
0 голосов
/ 05 марта 2012

Я думаю, что мой вопрос будет лучше понят, приведя следующий пример:

У меня есть таблица со следующими данными:

orderid  Price username paymentstatus
1        10    john     unpaid
2        10    john     unpaid
4        10    john     unpaid
5        10    john     unpaid
6        10    sam      unpaid
7        10    john     unpaid
8        10    john     paid

Я хочу найти все заказы (имя пользователя)john, где paymenttatus "неоплачен", а общая цена <= 20 </p>

Таким образом, в результате должны появиться следующие 2 строки (общая сумма заказа составляет 20 долларов, статус оплаты не оплачен, а имя пользователя - john)

EXPECTED RESULT:
==
orderid  Price username paymentstatus
1        10    john     unpaid  
2        10    john     unpaid

==  

Надеюсь, вы поняли мою точку зрения / вопрос?

Пожалуйста, помогите .. Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Почти ТОЧНО здесь же ответили на вопрос . Предполагается, что вам понадобится еще один столбец, чтобы действовать как промежуточный итог для данного клиента ...

Я создал таблицу и смоделировал данные точно так же, как ваши результаты, и пришел к ВАШИМ точным результатам ... Проблема заключалась в том, что MySQL как-то применял критерии ДВАЖДЫ в строке и не понимал, как и почему ... Я СИЛЬНО подозреваю, что это ошибка, но не могу описать это. В любом случае, у меня действительно есть исправление, которое заставляет внутренний «PreQuery» служить базой, и возвращает ВСЕ записи из этого с помощью @SQLVars, а затем применяет предложение WHERE из этого ...

select properSummed.*
   from 
      ( select
              o.orderid, 
              o.price, 
              @RunningTotal := @RunningTotal + o.price as UnpaidSoFar
           from
              orders o, 
              (select @RunningTotal := 0 ) sqlvars
           where o.ownerid = 1
             and o.paymentstatus = 'unpaid' ) properSummed
    where 
       properSummed.UnpaidSoFar <= 50
2 голосов
/ 05 марта 2012

Может быть, это?

SELECT *
FROM order_table
WHERE username = 'john' 
AND paymentstatus = 'unpaid'
AND Price <= 20

Но, учитывая ваши критерии, я ожидаю, что результаты также будут включать заказы 4, 5 и 7.

0 голосов
/ 05 марта 2012

что по этому поводу:

select *
from `orders`
where paymentstatus='unpaid' and username='john'
having sum(price) <= 20
...