Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] dublowanie, DISTINCT
banki
post
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
wookieb
post
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
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
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
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
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
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
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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował wookieb 29.07.2010, 10:16:33
Go to the top of the page
+Quote Post
zelu
post
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 (IMG:style_emoticons/default/smile.gif) W PostgreSQL owszem (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)

Pozdrawiam

Go to the top of the page
+Quote Post
skarabe.pl
post
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
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 (IMG:style_emoticons/default/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
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:29