Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP MySQL] Problem z zapytaniem/uzyskaniem informacji
Forum PHP.pl > Forum > PHP
Adi32
Mam tabelę 'orders' w niej kolumny:
id,
customer_id,
date_created,
commision_key

commision_key to kod rabatowy.

Potrzebuję jakoś elegancko wyciągnąć wszystkie zamówienia dla danego kodu rabatowego (jeden kod rabatowy jest przypisany do jednego partnera).
co by wyglądało: SELECT * FROM orders WHERE commision_key='ABCDEFGH'
ALE
potrzebuje wynik ograniczyć tylko do zamówień do 3 miesięcy od kiedy dany KLIENT pierwszy raz użył danego kodu rabatowego,
czyli powiedzmy, że customer_id=10 złożył zamówienie 10 stycznia z kodem rabatowym ABCDEFGH, potem zamówienie złożył 9 i 11 kwietnia (z tym samym kodem rabatowym), to to z 9 kwietnia się jeszcze załapie ale z 11 już nie...

Da rade to ładnie zrobić za pomocą SQL?

W mojej głowie siedzi niezgrabne rozwiązanie ale chyba nie będzie zbyt obciążające:
pobrać pierwsze zamówienie, tzn jego datę, i użyć przy zapytaniu jako ogranicznik...
nospor
Twoje rozwiazanie jest jak najbardziej ok.
Możesz też zrobic to w jednym zapytaniu, łączac twoje dwa zapytania, gdzie pobranie daty bazowej bedzie poprostu podzapytaniem
Adi32
  1. SELECT
  2. (SELECT date_created FROM orders WHERE commision_key='a5c4f6c8' GROUP BY customer_id ORDER BY date_created DESC LIMIT 1) AS date_c,
  3. order_items.id,
  4. order_items.order_id,
  5. order_items.store_id,
  6. order_items.price
  7. FROM
  8. order_items LEFT JOIN orders ON order_items.order_id = orders.id
  9. WHERE
  10. orders.STATUS = 'complete' AND
  11. orders.commision_key = 'a5c4f6c8' AND
  12. orders.date_created < DATE_ADD(date_c, INTERVAL 3 MONTHS)


1.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MONTHS) LIMIT 0, 30' at line 12

2. Nie mam pewności czy dobrze to zrobiłem, poza błędem, ogólnie coś mi się nie podoba z tym group by customer_id...
trueblue
Interwały w liczbie pojedynczej, czyli tu MONTH.
commision_key nie jest unikalne w obrębie rekordów w tablicy orders?
Adi32
Zmieniłem na MONTH, teraz error:
Unknown column 'date_c' in 'where clause'

commision_key nie jest unikalne. Jest unikalne w obrębie partnerów (każdy partner ma unikalny kod).

Własnie chodzi o pobranie wszystkich zamówień (a dokładniej zamówionych produktów) dla konkretnego partnera (z kodem jak w zapytaniu) ale z tym warunkiem, że do 3 miesięcy od pierwszego użycia kodu przez konkretnego klienta, inny klient jesli pierwszego zakupu z tym kodem dokonał później np 20 stycznia to liczą się wszystkie zamówienia tego klienta, z tym kodem do 20 kwietnia
nospor
alias date_c nie jest widoczny na poziomie WHERE, gdyż jest on generowany dopiero po dzialaniu WHERE a nie przed
Adi32
Śmiga...

  1. SELECT
  2. order_items.id,
  3. order_items.order_id,
  4. order_items.store_id,
  5. order_items.price,
  6. orders1.date_created
  7. FROM
  8. orders orders1 LEFT JOIN order_items ON order_items.order_id = orders1.id
  9. WHERE
  10. orders1.STATUS = 'complete' AND
  11. orders1.commision_key = '{$this->commision_key}' AND
  12. orders1.date_created < DATE_ADD(
  13. (SELECT date_created FROM orders WHERE commision_key='{$this->commision_key}' AND customer_id=orders1.customer_id ORDER BY date_created ASC LIMIT 1),
  14. INTERVAL 3 MONTH)


Dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.