Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mySql] podzapytania zamiast join?
Forum PHP.pl > Forum > Przedszkole
alekto
Cześć,

Mam tabelę C z listą klientów. W tabeli O są ich zamówienia.

C
id | imie
1 | Ewa
2 | Monika
3 | Rafał


O
c_id | o_nr | o_date
1 | 0915 | 20-01-14
1 | 0929 | 21-01-14
2 | 15150 | 20-01-14
2 | 17000 | 04-02-14
2 | 16098 | 28-01-14
2 | 17007 | 12-03-14
3 | 12120 | 20-03-14


Chcę uzyskać listę klientów z ich zamówieniami, ale ułożonymi w ten sposób:
c.id | o.o_nr1 | o.o_nr2 | o.o_nr3 | o.o_nr3

dla tabel poniżej wynik wyglądałby tak:
1 | 0915 | 0929 | NULL | NULL
2 | 15150 | 16098 | 17000 | 17007
3 | 12120 | NULL | NULL | NULL

Mam tylko początek zapytania:

  1. SELECT c.id,
  2.  
  3. (SELECT o1.o_nr
  4. FROM orders o1
  5. WHERE o1.c_id = c.id
  6. ) AS o_nr1
  7.  
  8. FROM customers c


Chcę, by zamówienia były uszeregowane; czyli zamówienie w kolumnie 2 jest starsze od zamówienia w kol3 itd.
Dla uproszczenia możemy założyć, że w bazie nie ma klientów z większą liczbą zamówień niż 4.

Czy da się to jakoś zrobić?

Nikt nie wie? baaasmiley.gif
jarek0203
Wydaje mi się że tak bedzie działać:
  1. SELECT id, o_nr FROM C, O WHERE id=c_id ORDER BY o_date
widmo_91
to co potrzebujesz to składnie PIVOT, mysql niestety nie ma wbudowanej składni PIVOT jednak da się to obejść jednak nie jest to najprostsze zagadnienie.

Aby w mysqlu wymodelować takie zapytanie należy skorzystać z: LEFT JOIN, CASE, GROUP BY. Ponadto jeżeli liczba zamówień jest nieskończona trzeba część zapytania wygenerować w pętli.
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.