Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobranie danych z dwoch tabel
kibao
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 26.11.2006
Skąd: Gliwice

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


Witam,
więc tak, mam dwie tabele customer i customer_group o mniej więcej takiej strukturze
  1. | customer |
  2. ---------------------
  3. customer_id - id klienta
  4. group_id - id grupy do ktorej klient nalezy
  5. bill - wartość rachunku, ilość wydanych pieniedzy
  6.  
  7. | customer_group |
  8. ---------------------------
  9. group_id - id grupy
  10. amount - minimalna ilość wydanych pieniędzy by klient moglbyc przypisany do grupy


I potrzebuje zmienić grupę do ktorej nalezy użytkownik gdy ilosc jego wydanych pieniedzy jest wieksza
od minimalnej ilosci pieniedzy pot....( amount )
i np.
  1. | customer|
  2. ------------------------
  3. customer_id | group_id | bill
  4. 1 | 2 | 100
  5. 2 | 1 | 200
  6. 3 | 2 | 150
  7. 4 | 2 | 200
  8. | customer_group |
  9. ------------------------
  10. group_id | amount
  11. 1 | 150
  12. 2 | 0
  13. 3 | 190


i przy takich danych chce by
klient 1 zostal bez zmian
klient 2 zostal przypisany do grupy 3
klient 3 zostal przypisany do grupy 1
klient 4 zostal przypisany do grupy 3 ( wybierana jest grupa o najwiekszej wartosci amount, ale taka ze bill >= amount )

i chcialem wszystko załatwić jednym zapytaniem lecz cos mi nie wychodzi :/


wymyśliłem jedynie zeby pobrac jednym zapytaniem customer_id i group_id,
a pozniej poscic for i pokolei dawać zapytania z update,
ale to zapytanie zawraca mi tez klientow ktorzy pozostaja bez zmian gdzie group_id = null


oto moje zapytanie
  1. SELECT customer_id,
  2. ( SELECT groups.group_id
  3. FROM customer_group AS groups
  4. WHERE customer.group_id != groups.group_id AND customer.bill >= groups.amount
  5. ORDER BY groups.amount
  6. DESC LIMIT 1 ) AS `group`
  7. FROM customer
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
mwojcik
post
Post #2





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


Dobre zapytanie sobie wymyśliłeś smile.gif
Jednak udało mi się to zawrzeć w 1 zapytaniu :
  1. UPDATE customer SET customer.group_id = (
  2. SELECT customer_group.group_id FROM customer_group WHERE customer_group.amount = (
  3. SELECT MAX(customer_group.amount) FROM customer_group WHERE customer_group.amount <= customer.bill
  4. )
  5. )


Juz tlumaczę jak dziala zapytanie :
zaczynajac od konca - wyciagam największą wartosc "amount" dla danego uzytkownika na podstawie wartosci "bill" ("amount" nie wieksze niz "bill"). Na podstawie tego wiem jaka jest wartosc "amount" dla grupy, do ktorej uzytkownik ma zostac przypisany. Pozniej majac juz "amount" moge wydobyc "group_id" dla tej wartosci, a te "group_id" uaktualniam dla kazdego uzytkownika.

Po wykonaniu jest :
customer_id group_id bill
1 2 100
2 3 200
3 1 150
4 3 200
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 21:40