Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] dublowanie, DISTINCT
banki
post 28.07.2010, 14:24:55
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 23.11.2007

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


Witam, mam takie zapytanie do bazy:

  1. $klient = mysql_query("select nazwa,rocznik,data,ile_sztuk from usluga where and data != '0' order by nazwa ");


chciałbym aby rekordy z kolumny nazwa, które mają taką samą nazwę nie wyświetlały się. Próbowałem z DISTINCT ale mi nie wychodziło.

w poniższym się zgadza, "nazwa" nie dublują się, ale potrzebuje też pobrać więcej danych z kolumn tym zapytaniem
  1. $klient = mysql_query("select DISTINCT nazwa from usluga where and data != '0' order by nazwa ");


z góry dzięki za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
wookieb
post 28.07.2010, 14:33:53
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. SELECT nazwa,rocznik,DATA,ile_sztuk FROM usluga WHERE AND DATA != '0' ORDER BY nazwa GROUP BY nazwa


--------------------
Go to the top of the page
+Quote Post
banki
post 28.07.2010, 14:48:35
Post #3





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 23.11.2007

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


wywala błąd:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in engine.php on line 1270

w linii błędu jest:
  1. while ($klient2 = mysql_fetch_array($klient)) {



bez tego Group by wyświetla rekordy, lecz nie tak jak tego chcę
Go to the top of the page
+Quote Post
wookieb
post 28.07.2010, 15:05:41
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No to wrzuć zapytanie do phpmyadmin i powiedz jaki wywali błąd.


--------------------
Go to the top of the page
+Quote Post
banki
post 29.07.2010, 09:33:40
Post #5





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 23.11.2007

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


#1064 - Something is wrong in your syntax obok 'group by nazwa
LIMIT 0, 30' w linii 1

Ten post edytował banki 29.07.2010, 09:34:43
Go to the top of the page
+Quote Post
wookieb
post 29.07.2010, 09:51:23
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. SELECT nazwa,rocznik,DATA,ile_sztuk FROM usluga WHERE DATA != '0' ORDER BY nazwa GROUP BY nazwa


--------------------
Go to the top of the page
+Quote Post
skarabe.pl
post 29.07.2010, 10:12:31
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


@wookie: z tego co pamiętam, to klauzula ORDER BY musi być za klauzulą GROUP BY, to raz. A dwa, że takie zapytanie nie ma prawa zadziałać, bo w GROUP BY trzeba wymienić *wszystkie* kolumny, które nie są funkcjami grupującymi.

@banki: spróbuj tak:
  1. SELECT nazwa,rocznik,DATA,ile_sztuk FROM usluga u WHERE AND DATA != '0' AND DATA = (SELECT MAX(u2.DATA) FROM usluga u2 WHERE u2.nazwa = u.nazwa) ORDER BY nazwa

Ciut niewydajne, ale powinno wyciągnąć to co trzeba. Powiedz jeszcze na której (których) kolumnie (kolumnach) jest klucz główny?
Go to the top of the page
+Quote Post
wookieb
post 29.07.2010, 10:15:26
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(skarabe.pl @ 29.07.2010, 11:12:31 ) *
@wookieb: z tego co pamiętam, to klauzula ORDER BY musi być za klauzulą GROUP BY, to raz.

Faktycznie źle testowałem
Cytat
A dwa, że takie zapytanie nie ma prawa zadziałać, bo w GROUP BY trzeba wymienić *wszystkie* kolumny, które nie są funkcjami grupującymi.

Tak jest w postgresie a nie mysql.
PS Twoje zapytanie właśnie nie działa smile.gif

Ten post edytował wookieb 29.07.2010, 10:16:33


--------------------
Go to the top of the page
+Quote Post
zelu
post 29.07.2010, 10:16:15
Post #9





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


Cytat(skarabe.pl @ 29.07.2010, 11:12:31 ) *
A dwa, że takie zapytanie nie ma prawa zadziałać, bo w GROUP BY trzeba wymienić *wszystkie* kolumny, które nie są funkcjami grupującymi.


Nie w MySQLu smile.gif W PostgreSQL owszem smile.gif

Cytat(skarabe.pl @ 29.07.2010, 11:12:31 ) *
  1. SELECT nazwa,rocznik,DATA,ile_sztuk FROM usluga u WHERE AND DATA != '0' AND DATA = (SELECT MAX(u2.DATA) FROM usluga u2 WHERE u2.nazwa = u.nazwa) ORDER BY nazwa

Ciut niewydajne, ale powinno wyciągnąć to co trzeba.


Ciut? smile.gif

Cytat(skarabe.pl @ 29.07.2010, 11:12:31 ) *
@wookie: z tego co pamiętam, to klauzula ORDER BY musi być za klauzulą GROUP BY, to raz.

A to się zgadza winksmiley.jpg

Pozdrawiam

Go to the top of the page
+Quote Post
skarabe.pl
post 29.07.2010, 10:21:47
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


Cytat(zelu @ 29.07.2010, 11:16:15 ) *
Nie w MySQLu :) W PostgreSQL owszem :)

Możliwe - niestety ostatnio mam mniej do czynienia z MySQL na rzecz Oracle, mogłem zapomnieć :( Przepraszam jeśli wprowadziłem w błąd.
Cytat(zelu @ 29.07.2010, 11:16:15 ) *
Ciut? :)

Ciut - jeśli indeksy są tam gdzie trzeba (stąd moje pytanie o klucz). Rozumiem, że w MySQL, zgodnie z tym co napisałeś wyżej, wystarczy zmienić kolejność klauzul w zapytaniu wookieb i będzie hulało? Jeśli tak, to oczywiście "this is the way to go" :)
Go to the top of the page
+Quote Post
banki
post 29.07.2010, 10:50:44
Post #11





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 23.11.2007

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


metodą prób i błędów doszedłem jak mogę zrobić to co chcę, Wasze uwagi też pomogły, lecz teraz jeszcze inny problem mam smile.gif


  1. SELECT nazwa,rocznik,DATA,ile_sztuk FROM usluga WHERE DATA != '0' ORDER BY nazwa GROUP BY nazwa


jeśli 2 wiersze się powtarzają, pokazuje tylko jeden, jest spoko ok

| nazwa |rocznik| data | ile_sztuk |
| nazwa1 | 1990 | 20.01.2001 | 20 |
| nazwa1 | 1990 | 20.01.2001 | 10 |
| nazwa2 | 1980 | 20.01.2001 | 20 |
| nazwa3 | 1982 | 20.01.2001 | 20 |


to jest taka tabelka, chciałbym teraz aby dane z kolumny ile_sztuk się zsumowały gdzie nazwa jest taka sama (ale dalej wyświetla się tylko raz "nazwa1" zamiast 2 razy. jeśli niejasno napisałem rozpisze raz jeszcze, ale chyba wiadomo o co chodzi
Go to the top of the page
+Quote Post
wookieb
post 29.07.2010, 10:53:28
Post #12





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://dev.mysql.com/doc/refman/5.0/en/gro...ml#function_sum


--------------------
Go to the top of the page
+Quote Post
skarabe.pl
post 29.07.2010, 10:53:45
Post #13





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


Cytat(banki @ 29.07.2010, 11:50:44 ) *
to jest taka tabelka, chciałbym teraz aby dane z kolumny ile_sztuk się zsumowały

Magiczną funkcją SQL do tego jest SUM(ile_sztuk), zamiast golego ile_sztuk.
Go to the top of the page
+Quote Post
banki
post 29.07.2010, 10:55:05
Post #14





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 23.11.2007

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


dobra sorki panowie za glupie pytanie, najpierw zapytalem potem odpaliłem google a znalazlem od razu, glupi moj blad.
dzieki za pomoc
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 - 10:13