Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> informacje pobierane z 2 tabel
Strzałek
post 1.12.2005, 17:25:50
Post #1





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


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

Ten post edytował Strzałek 1.12.2005, 18:22:48


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
AxZx
post 1.12.2005, 18:34:39
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


chcesz gotowe rozwiazanie czy tylko sugestie gdzie masz szukac rozwiazania?

JOIN, LEFT JOIN, itd itp..


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Bora
post 1.12.2005, 20:04:10
Post #3





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


  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


Ten post edytował Bora 1.12.2005, 20:05:18
Go to the top of the page
+Quote Post
Strzałek
post 1.12.2005, 21:20:04
Post #4





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


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


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 1.12.2005, 21:36:58
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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.


--------------------
Go to the top of the page
+Quote Post
Strzałek
post 2.12.2005, 14:13:53
Post #6





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


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


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 2.12.2005, 14:41:37
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. SELECT max( id ), artist
  2. FROM productions GROUP BY artist

Zobacz czy sie wykonuje, jak nie to jest blad w nazwach pol


--------------------
Go to the top of the page
+Quote Post
Strzałek
post 2.12.2005, 15:03:04
Post #8





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


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


--------------------
Go to the top of the page
+Quote Post
Synaps
post 2.12.2005, 15:03:53
Post #9





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Gdynia

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


  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.

Ten post edytował Synaps 2.12.2005, 15:23:48


--------------------
MySQL said:

You have an error in your SQL syntax near ' `sygnatura` VARCHAR, NOT NULL
Go to the top of the page
+Quote Post
Strzałek
post 2.12.2005, 15:47:37
Post #10





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


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


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 3.12.2005, 01:11:19
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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.


--------------------
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:00