Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie danych z dwoch tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
kibao
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
mwojcik
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
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.