Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL] Sortowanie po GROUP BY
--asa--
post 1.08.2008, 10:31:39
Post #1





Goście







jak posortować wyniki malejąco wg. GROUP BY ?

czyli mam rekordy:

Kod
pies
pies
kot
pies
krowa
pies
kot
kot
krowa



i chce je mieć w takiej kolejności:

krowa (bo występuje najmniej x)
kot
pies (bo występuje najwięcej)
Go to the top of the page
+Quote Post
phpion
post 1.08.2008, 10:36:03
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Poczytaj o COUNT i użyj go do wyświetlenia ilości wystąpień danego wyraz oraz do sortowania.
Go to the top of the page
+Quote Post
Ociu
post 1.08.2008, 10:39:07
Post #3





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




  1. SELECT DISTINCT nazwa FROM zwierzeta GROUP BY nazwa ORDER BY cos ASC
?
Go to the top of the page
+Quote Post
phpion
post 1.08.2008, 10:44:16
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Ociu: chyba nie bardzo smile.gif

Skoro szalejemy z gotowcami to:
  1. SELECT nazwa_zwierzecia, COUNT(*) FROM zwierzeta GROUP BY nazwa_zwierzecia ORDER BY COUNT(*) ASC

Powinno śmigać.
Go to the top of the page
+Quote Post
Ociu
post 1.08.2008, 10:59:02
Post #5





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Masz rację.
Go to the top of the page
+Quote Post
--asa--
post 1.08.2008, 11:03:58
Post #6





Goście







phpion - działa smile.gif dzięki. sam doszedłem - a tu widze już jest gotowiec smile.gif

ale ...

sprawa sie komplikuje.

mamy tabele:

ssaki| gady | ryby |
i rekordy

kot|zmija|flądra
pies|zmija|śledź
kot|krokodyl|makrela
pies|krokodyl|flądra

i teraz czy da się w jednym zapytaniu wybrać i posortować je w zależności od ilości wystapien (tak jak w poprzednim przykladzie)

by otrzymac listę posortowaną - i znacznik do jakiej grupy zwierzat nalezy ?

P.S.
bo robie chmurke tagow smile.gif
Go to the top of the page
+Quote Post
--asa--
post 1.08.2008, 11:08:07
Post #7





Goście







dane przykladowe trosze zle dobralem bo wieksozsc sie powtarza 2x ...

poprawiajac

kot|zmija|flądra
kot|krokodyl|śledź
kot|krokodyl|makrela
pies|krokodyl|makrela
pies|krokodyl|makrela


i chcial bym otrzymac:

krokodyl - gad(4x)
kot - ssak(3x)
...
pies ssak (1x)
Go to the top of the page
+Quote Post
-Gość-
post 1.08.2008, 11:12:32
Post #8





Goście







Da sie ale wiecej z tym zamoty niz to warte.

Sugeruje normalizacje tablicy w nast sposob.

ssaki|gady|ryby => |zwierzeta|rodzaj(varchar)|
lub w osobnej tabeli rodzaje zwierzat i w kolumnie zwietrzeta kolumna zid laczaca sie z rodzajami zwierzat ale na twoje potrzeby wystarczy chyba |zwierzeta|rodzaj|

wtedy mozesz latwo groupowac po kolumnach uzywajac group by ()
Go to the top of the page
+Quote Post
calebos
post 1.08.2008, 11:13:59
Post #9





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

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


Sry nie bylem zalogowany.

Mowiac 'Da sie ale wiecej z tym zamoty niz to warte." mialem na mysli oczywiscie przy obecnej konstrukcji bazy.
Go to the top of the page
+Quote Post
--asa--
post 1.08.2008, 11:14:02
Post #10





Goście







tylko nie moge zmienić układu tabeli ...
Go to the top of the page
+Quote Post
--asa--
post 1.08.2008, 11:16:43
Post #11





Goście







bo to jest tak że mam news. Do każdego newsa dodaje 6 tagów.

id|id_newsa|tag1|tag2|...|tag6

i teraz chce je zliczyc, i w zależności od tego na którym miejscu dany tag jest przypisać mu mnożnik - np. dla tag1: 2.0 a dla tag6 0.25. Pomnożyć ilosć wystapien przez ten mnoznik i wyswietlic w chmurce tagów.
Go to the top of the page
+Quote Post
calebos
post 1.08.2008, 11:25:36
Post #12





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

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


Zostaje ci przechwycenie nazw kolum i danych do tablic php i petlowanie przez to.
Generalnie nazwa kolumny nie sluzy do przechowywania danych w bazie danych tylko wiersze...
SQL'em nic nie przychodzi mi do glowy aby grupowac dane z kolumny+nazwy kolumn.

distinct i group by nie pomoga w identyfikacji typu dla danych.
Zrob druga tablice i tam sobie to postaw tak jak napisalem.
Bardzo prosto mozna to przerobic samymi zapytaniami sql.
INSERT INTO NOWA BAZA (dane,zwierzotyp)VALUES (SELECT DISTINCT ssaki,(zwierzotyp) FROM ZLATABLICA )

EDIT napisz ty spokojnie calosc co to ma robic a nie tylko wyrywki i struktury..

Ten post edytował calebos 1.08.2008, 11:28:02
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: 7.07.2025 - 22:22