-asa-
1.08.2008, 10:31:39
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)
phpion
1.08.2008, 10:36:03
Poczytaj o
COUNT i użyj go do wyświetlenia ilości wystąpień danego wyraz oraz do sortowania.
SELECT DISTINCT nazwa FROM zwierzeta GROUP BY nazwa ORDER BY cos ASC
?
phpion
1.08.2008, 10:44:16
@Ociu: chyba nie bardzo

Skoro szalejemy z gotowcami to:
SELECT nazwa_zwierzecia, COUNT(*) FROM zwierzeta GROUP BY nazwa_zwierzecia ORDER BY COUNT(*) ASC
Powinno śmigać.
-asa-
1.08.2008, 11:03:58
phpion - działa

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

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
-asa-
1.08.2008, 11:08:07
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)
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 ()
calebos
1.08.2008, 11:13:59
Sry nie bylem zalogowany.
Mowiac 'Da sie ale wiecej z tym zamoty niz to warte." mialem na mysli oczywiscie przy obecnej konstrukcji bazy.
-asa-
1.08.2008, 11:14:02
tylko nie moge zmienić układu tabeli ...
-asa-
1.08.2008, 11:16:43
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.
calebos
1.08.2008, 11:25:36
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..
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.