Data z mysql jen jednou – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Data z mysql jen jednou – PHP – Fórum – Programujte.comData z mysql jen jednou – PHP – Fórum – Programujte.com

 

mustafa0
Stálý člen
2. 9. 2007   #1
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Co říct? Nic, mluví příspěvky.
Curo
~ Šéfredaktor
+8
Hero
2. 9. 2007   #2
-
0
-

	$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.

Nahlásit jako SPAM
IP: 88.146.184.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
mustafa0
Stálý člen
2. 9. 2007   #3
-
0
-

To Curo: vypadá to trochu usekle, nepletu-li se??

Nahlásit jako SPAM
IP: ...–
Co říct? Nic, mluví příspěvky.
Curo
~ Šéfredaktor
+8
Hero
2. 9. 2007   #4
-
0
-

Ne, je to celé, ale netestoval jsem, zda-li tam není chyba.

Nahlásit jako SPAM
IP: 88.146.184.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
mustafa0
Stálý člen
2. 9. 2007   #5
-
0
-

To Curo:mě tam chybí minimálně ta závorka na ukončení for:
for ($pom=0;$pom
to netušim jak funguje

Nahlásit jako SPAM
IP: ...–
Co říct? Nic, mluví příspěvky.
Smokie0
Expert
2. 9. 2007   #6
-
0
-

mustafa ma pravdu, to urcite nie je cele :)

okrem ukoncenia zatvorky chyba aj bodkociarka

Nahlásit jako SPAM
IP: ...–
Smokie0
Expert
2. 9. 2007   #7
-
0
-

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"];
}

Nahlásit jako SPAM
IP: ...–
meneltharion0
Návštěvník
2. 9. 2007   #8
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Curo
~ Šéfredaktor
+8
Hero
2. 9. 2007   #9
-
0
-

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.

Nahlásit jako SPAM
IP: 88.146.184.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
Zelenáč0
Posthunter
2. 9. 2007   #10
-
0
-

Curo píše:#
# 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.


vejtaho ;-)

Nahlásit jako SPAM
IP: ...–
štěpán
~ Anonymní uživatel
126 příspěvků
2. 9. 2007   #11
-
0
-

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?).

Nahlásit jako SPAM
IP: ...–
Prog.0
Věrný člen
4. 9. 2007   #12
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Prog.
štěpán
~ Anonymní uživatel
126 příspěvků
4. 9. 2007   #13
-
0
-

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é.

Nahlásit jako SPAM
IP: ...–
Prog.0
Věrný člen
5. 9. 2007   #14
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
Prog.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Jak udělat, aby animace proběhla jen jednou. — založil JeanBabtisteGrenouille

Vhodný MySQL Data Editor — založil Qukler

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý