Autor | Zpráva | ||
---|---|---|---|
MilanKarkulka Profil |
#1 · Zasláno: 1. 9. 2016, 15:52:00
Mám následující tabulku:
auto | cena | výrobce Z1 | 300 000 | BMW Z2 | 350 000 | BMW Z3 | 400 000 | BMW A1 | 150 000 | AUDI A2 | 170 000 | AUDI A3 | 200 000 | AUDI (1.) A já chci vypsat všechny unikátní výrobce. (2.) A rozmezí (min max) jejich cen. Takže výsledek by byl takovýto: BMW 300 000 - 400 000 AUDI 150 000 - 200 000 Já ten dotaz dokáži napsat. Ale pouze tak, že do jednoho SQL dotazu vložím další dva SQL dotazy. Což není asi moc OK, že? |
||
juriad Profil |
#2 · Zasláno: 1. 9. 2016, 15:53:30
Jde o jeden z nejjednodušších dotazů:
SELECT vyrobce, MIN(cena), MAX(cena) FROM tabulka GROUP BY vyrobce |
||
MilanKarkulka Profil |
Děkuji. Ale ten tvůj SQL dotaz tedy moc nechápu.
Mohl by jsi ho prosím dosadit do této šablony? Především to echo... . Snad mi to dojde. <? $query=mysql_query("SELECT vyrobce, MIN(cena), MAX(cena) FROM tabulka GROUP BY vyrobce"); while ($vypis=mysql_fetch_array($query)) { //echo: BMW 300 000 - 400 000 } ?> |
||
juriad Profil |
#4 · Zasláno: 1. 9. 2016, 16:19:29
<?php # používej vždy dlouhý otevírací tag # varuji tě, funkce mysql_* už v nové verzi PHP neexistují, použij mysqli_* (liši se obvykle jedním parametrem navíc) $query = mysql_query("SELECT vyrobce, MIN(cena) AS mincena, MAX(cena) AS maxcena FROM tabulka GROUP BY vyrobce"); # pojmenujeme si výstupy funkcí; název tabulky si doplň podle svého while ($vypis = mysql_fetch_array($query)) { echo $vypis['vyrobce'] . ' ' . $vypis['mincena'] . ' - ' . $vypis['maxcena']; # pokud vypisuješ do HTML stránky, tak ještě: htmlspecialchars($vypis['vyrobce']) # pokud bys chtěl oddělení po třech místech, tak použij funkci number_format. } ?> |
||
MilanKarkulka Profil |
#5 · Zasláno: 1. 9. 2016, 16:33:05
Perfektní. Mockrát děkuji!
Na tvém prvním příkladu mě zmátlo, že tam nebylo AS mincena/AS maxcena. Nyní již chápu jak k těm hodnotám přistupovat. Mohu se ještě zeptat, na které místo by se vkládalo WHERE? Pokud bych měl např. ještě další sloupec "skladem" a bral bych v úvahu pouze WHERE skladem=1. |
||
juriad Profil |
#6 · Zasláno: 1. 9. 2016, 16:36:56
juriad:
WHERE patří před GROUP BY, ale... Pokud přidáš WHERE podmínku, tak se ti budou počítat jen ceny z věcí, které jsou skladem. Pokud chceš pro každého výrobce vědět, kolik věcí od něj máš skladem, a sloupec skladem je pouze 0 nebo 1, pak stačí přidat do SELECTU: SUM(skladem) AS pocetskladem |
||
MilanKarkulka Profil |
#7 · Zasláno: 1. 9. 2016, 16:42:39
juriad:
Vyřešeno. Děkuji za dokonalé odpovědi. |
||
MilanKarkulka Profil |
Ahoj,
mám ještě jeden doplňující dotaz. Šlo by udělat, aby jsem dostal pro minimální cenu i odpovídající značku auta (sloupec auto)? Tj. že například u BMW by jsem vypsal nejenom že MIN(cena) je 300 000. Ale i to, že to nejlevnější auto se jmenuje Z1. (jsem si vědomý toho, že více aut může mít stejnou cenu, ale to mi je jedno, beru kterékoliv z nich) |
||
Kajman Profil |
SELECT mm.vyrobce, mm.mincena, mm.maxcena, Min(t.auto) minauto, Group_concat(DISTINCT t.auto) minautoall FROM (SELECT vyrobce, Min(cena) AS mincena, Max(cena) AS maxcena FROM tabulka WHERE skladem = 1 GROUP BY vyrobce) mm JOIN tabulka t ON mm.vyrobce = t.vyrobce AND mm.mincena = t.cena AND t.skladem = 1 GROUP BY mm.vyrobce, mm.mincena, mm.maxcena |
||
Časová prodleva: 8 let
|
0