Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP MySQL] Problem z zapytaniem/uzyskaniem informacji
Adi32
post
Post #1





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Adi32
post
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  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...
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Interwały w liczbie pojedynczej, czyli tu MONTH.
commision_key nie jest unikalne w obrębie rekordów w tablicy orders?
Go to the top of the page
+Quote Post
Adi32
post
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




alias date_c nie jest widoczny na poziomie WHERE, gdyż jest on generowany dopiero po dzialaniu WHERE a nie przed
Go to the top of the page
+Quote Post
Adi32
post
Post #7





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ś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.

Ten post edytował Adi32 30.04.2014, 07:43:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 17:02