ahoj,
mám a zkusím ho vysvětlit na příkladu:
mám databázi lidí (klientů například) a potřebuji si vypsat všechny města a obce ve kterých bydlí, ale to tam pak praha bude 150 a brno "jen" 100,a le já potřebuji, aby se každé město vypsala jen jednou, nevíte někdo jak jednoduše na to jít?
(vyjma vytváření pole a pokaždé ho projít atd.)
díky
Fórum › PHP
Data z mysql jen jednou
$priklad = ""; // jen pro priklad
$dotaz1="select * from klienti order by bydliste";
$dotazcla=mysql_query($dotaz1,$db);
$pocetcla=mysql_num_rows($dotazcla);
for ($pom=0;$pom<$pocetcla;$pom++):
$data_cla=mysql_fetch_assoc($dotazcla); // nacteni dat
$priklad2 = $data_cla["bydliste"];
if($priklad!=$priklad2):
echo "<p>".$data_cla["bydliste"]."</p>";
endif;
$priklad = $data_cla["bydliste"];
endfor;
Nebo-li, najdeš-li již použité bydlení, nevypisuj. Použitelné pouze při tomto typu řazení, jinak je nutno použít pole.
Sleduj mě na twitteru – @lukaschury.
Ne, je to celé, ale netestoval jsem, zda-li tam není chyba.
Sleduj mě na twitteru – @lukaschury.
Ja by som to urobil asi takto:
$predosly_zaznam = '';
$link = mysql_pconnect(server, uzivatel, heslo)
$query = "SELECT * FROM klienti ORDER BY bydliste";
$result = mysq_query($query, $link);
while($row=mysql_fetch_array($result))
{
if($row["bydliste"] <> $predosly_zaznam) echo $row["bydliste"];
$predosly_zaznam = $row["bydliste"];
}
No, snad jsem to dobře pochopil, ale zdá se mi, že by stačilo:
$query = 'SELECT DISTINCT mesto FROM klienti'; // příp. ještě ORDER BY
Result set by měl potom obsahovat ta města, každé jen jednou.
Zdroj problému je zde: Já již používám novou verzi fóra, kde je vše ok, ale nynější verze fóra nezobrazuje korektně vložené informace :). Zde uvedná řešení jsou ok, takže to nebudu předělávat.
Sleduj mě na twitteru – @lukaschury.
To Smokie: ...hned si to musím někde poznamenat :-) teď vážne... většina agregačních nebo jiných výpočetních operací jde s přehledem vykonat na serveru v databázi - ať se jedná o prosté SQL nebo uložené procedury. Databáze je pro práci s daty stavěná - pokud s nimi pracujete, tak se nejdříve podívejte, jestli neexistuje nějaká funkce která by splňovala vaše potřeby (nejčastěji agregace, COUNT, AVG, MIN, MAX nebo složitější analytické funkce).
Samozřejmě jde v prvé řadě o výkonnost:
1) vykonání v databázi (SQL nebo procedury)
- matematická operace se zpracuje nativním kódem v databázi a do PHP půjde pouze výsledek,
- zároveň při každém dalším spuštění skriptu se díky cachování (prováděcího plánu dotazů a vlastních dat) šetří nejen výkon procesoru, ale také výkon při I/O operacích (data budou v paměti a nemusí se číst z disku),
- na klienta se přenáši jen to nejméně nutné množství dat.
2) v DB jsou pouze data, vykonání logiky v PHP
- kód se zpracovává na serveru ve skriptu, který se kompiluje opakovaně (v lepším případě dochází ke cachování),
- v databázi se při každém volání načítají celé tabulky, to může mít samozřejmě i neblahý vliv (cachování, nároky procesoru, I/O operace) pro jiné databázové procesy,
- na klienta se přenáší prakticky všechno (hmm, jak systém bude fungovat pokud bude obsahovat záznamy v řádech tisíc a více?).
Spravne & najjednoduchšie riešenie tu už bolo:
meneltharion píše:#
# No, snad jsem to dobře pochopil, ale zdá se mi, že by stačilo:#
##$query = ##uvozovka##SELECT DISTINCT mesto FROM klienti##uvozovka##; // příp. ještě ORDER BY
#Result set by měl potom obsahovat ta města, každé jen jednou.
Možne je ešte použiť (ale je to pomalšie):
SELECT mesto FROM klienti GROUP BY mesto
SELECT mesto, count(*) FROM klienti GROUP BY mesto
To Prog.: Není to pravda, že v obou případech to je pomalejší... protože v obou případech dochází k řazení - a je asi jedno, jestli řazení kvůli DISTINCT nebo kvůli GROUP BY (ověřeno pomocí EXPLAIN PLAN a TRACE). Optimalizátor vykoná v obou případech stejný plán a zároveň i ostatní veličiny jsou srovnatelné.
To štěpán: Njn, tak máš asi pravdu. Ale aj tak by som na to GROUP BY nepoužil, ty snáď áno?
Keď potom pozriem na kód vidím slovo DISTINCT, tak mi je hneď jasné, že sa jedná o výber všetkých jedinečných položiek, pričom za GROUP BY by som hľadal nejaké agregačné fcie...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Aby se formulář otevřel jen jednou — založil korunka
Jak udělat, aby animace proběhla jen jednou. — založil JeanBabtisteGrenouille
PHP MySQL Ukažení pouze jednou — založil Skaci
Vhodný MySQL Data Editor — založil Qukler
Vyber urciteho data z tabulky MySQL — založil micro.21
Moderátoři diskuze