Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: informacje pobierane z 2 tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Strzałek
Witam.

Mam 2 tabele:

artists: id, name, history, foto, telephone, email, www
productions: id, name, artist (numer id. artysty)

chciał bym jednym zapytaniem wyciągnąć

nazwę artysty, ilość wydanych płyt, oraz nazwę ostatnio wydanej płyty.

Mam nadziję że zrozumieliście problem.
Pozdrawiam Strzałek
AxZx
chcesz gotowe rozwiazanie czy tylko sugestie gdzie masz szukac rozwiazania?

JOIN, LEFT JOIN, itd itp..
Bora
  1. SELECT p.id pid, p.name pname, p.artist, a.*, count(a.id) count
  2. FROM productions p LEFT JOIN artists a ON a.artist = p.id ORDER BY p.id DESC
Strzałek
hmmm, niestety nie działa

Cytat
#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 'select p.id pid, p.name pname, p.artist, a.*, count(a.id) count
from production' at line 2
SongoQ
Pierwsze to dorzucilbym data w plycie

  1. SELECT artists.id, artist.name, count(productions.artist) AS i, t2.name
  2. FROM artists, productions,
  3. (
  4. SELECT max(id) AS id, artist
  5. FROM productions GROUP BY artist
  6. ) t1,
  7. productions t2
  8. WHERE artists.id = productions.artist AND artists.id = t1.artist AND t1.id = t2.id


Moze byc blad bo nie sprawdzalem, jak by nie dzialalo z podzapytaniami to musisz uzyc 2 zapytan.
Strzałek
zapytanie SQL:

  1. SELECT artists.id, artists.name, count( productions.artist ) AS i, t2.name
  2. FROM artists, productions, (
  3.  
  4. SELECT max( id ) AS id, artist
  5. FROM productions GROUP BY artist
  6. )t1, productions t2
  7. WHERE artists.id = productions.artist AND artists.id = t1.artist AND t1.id = t2.id
  8. LIMIT 0, 30


MySQL zwrócił komunikat:
Cytat
#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
SongoQ
  1. SELECT max( id ), artist
  2. FROM productions GROUP BY artist

Zobacz czy sie wykonuje, jak nie to jest blad w nazwach pol
Strzałek
Cytat(SongoQ @ 2005-12-02 14:41:37)
Zobacz czy sie wykonuje, jak nie to jest blad w nazwach pol

owszem wykonuje się, i jak zauważyłem ten kod co podałeś wyżej też się wykonuje, ale jak usunę z niego COUNT'a
Synaps
  1. SELECT artists.id, artists.name, count( productions.artist ) AS i, t2.name
  2. FROM artists, productions,
  3. (SELECT max( id ) AS id, artist
  4. FROM productions GROUP BY artist
  5. )t1,
  6. productions t2
  7. WHERE artists.id = productions.artist AND artists.id = t1.artist AND t1.id = t2.id
  8. GROUP BY artists.id, artists.name, t2.name
  9. LIMIT 0, 30


Jeśłi używasz COUNT w SELECT musisz pogrupować wyniki po pozostały polach z sekcji wybierającej.
Strzałek
Synaps dziękuję. Wszystko śmiga tak jak powinno, a chciał bym się spytać jeszcze o to:

Cytat
Jeśłi używasz COUNT w SELECT musisz pogrupować wyniki po pozostały polach z sekcji wybierającej.


czyli ? Mógł byś mi to wytłumaczyć na jkimś prostym przykładzie abym miał naukę na przyszłość smile.gif ?

Pozdrawiam
SongoQ
Ale gafe strzelilem, zobaczylem ten komunikat bledu i pomyslalem ze chodzi o podselect.

Cytat
Mógł byś mi to wytłumaczyć na jkimś prostym przykładzie abym miał naukę na przyszłość smile.gif ?

Tlumaczyc mozna, ale najlepiej jak to sam doczytasz i dojdziesz dlaczego tak.

Przyklad:

Tabela:
id | pole_a | pole_b | pole_c

1. Chcesz zwrocic ilosc max z pola id
  1. SELECT max(id)
  2. FROM tabela


2. Chcesz zwrocic max id dla grupy pole_a i to pole, np w polu pole_a masz kolor i chcesz wiedziec dla jakiego koloru jakie jest max id
  1. SELECT max(id), pole_a
  2. FROM tabela GROUP BY pole_a


3. Chesz dodatkowo zwrocic jeszcze pole_b to robisz
  1. SELECT max(id), pole_a, pole_b
  2. FROM tabela GROUP BY pole_a, pole_b


Jesli masz agregacje i chesz uzyc wiecej pol w select to musisz pola wymienic w group by.
Mam nadzieje ze Ci to cos rozjasnilo.
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.