ďťż
 
MySQL grupowanie rekordow ďťż
 
MySQL grupowanie rekordow
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

MySQL grupowanie rekordow



wojtek - 12-11-2006 01:34
MySQL grupowanie rekordow
  Witam,
Podpowiedzcie mi jak zrobić coś takiego. Mam przykladowa tabelke

miasto ulica
-----------------
lublin kunickiego
torun staszica
torun dluga
warszawa krutka
lublin lwowska

Chcę wyswietlic poukladane rekordy w ten sposob:

miasto ulica
-----------------
lublin kunickiego
lwowska
torun staszica
dluga
warszawa krutka

chodzi mi o to zeby nazwe miasta wyswietlac tylko 1 raz na poczatku.





Filip Rembiałkowski - 12-11-2006 01:34

  wojtek wrote:
> Witam,
> Podpowiedzcie mi jak zrobić coś takiego. Mam przykladowa tabelke
>
> miasto ulica
> -----------------
> lublin kunickiego
> torun staszica
> torun dluga
> warszawa krutka
> lublin lwowska
>
> Chcę wyswietlic poukladane rekordy w ten sposob:
>
> miasto ulica
> -----------------
> lublin kunickiego
> lwowska
> torun staszica
> dluga
> warszawa krutka
>
> chodzi mi o to zeby nazwe miasta wyswietlac tylko 1 raz na poczatku.

select miasto, ulica
from (
/* tutaj wybieramy wiersze "nagłówkowe" */
select miasto as hidden, ' ' as miasto, ulica from t
UNION ALL
/* a tu wszystko */
select miasto as hidden, miasto, min(ulica) as ulica from t
group by miasto
/* sortujemy - ważne że tutaj */
order by hidden, ulica, miasto desc
) x
/* odrzucamy duplikaty w polu "hidden" */
group by hidden, ulica ;

BTW najpierw robiłem to w postgresie gdzie jest klauzula "DISTINCT ON" ale
okazało się że mysql'owe "group by" jest jej niezłym odpowiednikiem




wojtek - 12-11-2006 01:34

  Filip Rembiałkowski napisał(a):

>
> BTW najpierw robiłem to w postgresie gdzie jest klauzula "DISTINCT ON" ale
> okazało się że mysql'owe "group by" jest jej niezłym odpowiednikiem
>

A mnie sie udalo to zrobic uzywajac DISTINCT .
Tak naprawde to potrzebowalem grupowania po 2 polach, i mam tak:

$wyb_woj = "SELECT DISTINCT woj FROM tabela ORDER BY woj ASC";
$wykonaj_woj = mysql_query ($wyb_woj);

while($wojewodztwa=mysql_fetch_array ($wykonaj_woj))
{
echo "wojewodztwo ".$wojewodztwa['woj']."";

$wyb_miasta = "SELECT DISTINCT miasto FROM tabela WHERE woj =
'$wojewodztwa[woj]' ORDER BY miasto ASC";
$wykonaj_miasto = mysql_query ($wyb_miasta);

while($miasta=mysql_fetch_array ($wykonaj_dek)) {
echo "miasto: ".$miasta['miasto']."";

$wyb_ul = "SELECT id, woj, miasto, ul FROM tabela WHERE
miasto='$miasta[miasto]' ORDER BY miasto, ul ASC";
$wykonaj_ul = mysql_query ($wyb_ul);
while($ulice=mysql_fetch_array ($wykonaj_ul))
{
echo"".$ulice['ul']."";
}
}
}

Dziala ale nie wiem czy dobre jest (fachowe) wstawianie w warunek WHILE
tej czesci kodu z SELECT i to wielopoziomowo.

P.S. Bo zielony jestem w PHP i MySQL (na razie :-))




Paweł Matejski - 13-11-2006 00:13

  wojtek wrote:
> Filip Rembiałkowski napisał(a):
>
>>
>> BTW najpierw robiłem to w postgresie gdzie jest klauzula "DISTINCT ON"
>> ale
>> okazało się że mysql'owe "group by" jest jej niezłym odpowiednikiem
>>
>
> Dziala ale nie wiem czy dobre jest (fachowe) wstawianie w warunek WHILE
> tej czesci kodu z SELECT i to wielopoziomowo.

To, że rozwiązanie przeniosłeś na strone klienta, jest dobre. To, że w pętli
wywołujesz SELECT jest złe.
Zwróć normalne zapytanie, posortowany po miastach. A potem przy wyświetlaniu
sprawdzaj, czy zmieniło się miasto i tylko wtedy je wyświetlaj.

--
P.M.





wojtek - 13-11-2006 00:13

  Paweł Matejski napisał(a):

>
> To, że rozwiązanie przeniosłeś na strone klienta, jest dobre. To, że w pętli
> wywołujesz SELECT jest złe.
czym to moze skutkowac? wydajnoscia, bezpieczenstwem?

> Zwróć normalne zapytanie, posortowany po miastach. A potem przy wyświetlaniu
> sprawdzaj, czy zmieniło się miasto i tylko wtedy je wyświetlaj.
>
jak sprawdzic czy sie zmienilo?




Paweł Matejski - 13-11-2006 00:13

  wojtek wrote:
> Paweł Matejski napisał(a):
>
>>
>> To, że rozwiązanie przeniosłeś na strone klienta, jest dobre. To, że w
>> pętli
>> wywołujesz SELECT jest złe.
> czym to moze skutkowac? wydajnoscia, bezpieczenstwem?

wydajnoscia.

>> Zwróć normalne zapytanie, posortowany po miastach. A potem przy
>> wyświetlaniu
>> sprawdzaj, czy zmieniło się miasto i tylko wtedy je wyświetlaj.
>>
> jak sprawdzic czy sie zmienilo?

if'em

O podstawy programowania pytaj na innej grupie.

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • latwa-kasiora.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com