Dotaz do MySQL

Moderátor Kráťa, 18.05.2017 01:18, Programování, 2 odpovědi (257 zobrazení)
Pořádáme festival, který bude po celé republice. Organizátoři akcí budou mít formulář, kam vloží údaje o organizaci
(kraj | jméno organizace | adresa organizace)
http://orbipontes.unas.cz/tkosp-formular/novy/inde x.html
a po odeslání se to uloží do db, do tabulky tkosp_organizace a načte se částečně předvyplněný formulář na vložení akce
(město, kde bude akce | datum akce...)
http://orbipontes.unas.cz/tkosp-formular/novy/vloz eni-akce.php
To se potom uloží do tabulky tkosp_akce.

Z toho všeho, by pak měl vylézt kompletní program. Ale nevím to základní. Jak potom vypsat kraj a město pouze jednou.
Dotaz do MySQL asi bude něco jako
SELECT * FROM tkosp_organizace,tkosp_akce ORDER BY kraj,mesto,datum;
A chtěl bych docílit toho, aby se vypsaly vložené kraje a vložená města a to pouze jednou. Zkrátka něco takového

http://pc.poradna.net/file/view/28894-tkosp-progra  m-png

Děkuji 964x za pomoc.
Nejsme zaměstnanci - jsme dobrovolníci

Odpovědět


PředmětAutorDatum
Re: Dotaz do MySQL Squad_leader18.05.2017 01:52
Re: Dotaz do MySQL posledníJan Fiala18.05.2017 06:25

Re: Dotaz do MySQL

Bronzový rádce Squad_leader, 18.05.2017 01:52
Ahoj, koukám, že ještě taky nespíš :-D.

Tahle věc by se dala velice pěkně naskriptovat v PHP, které máš na straně serveru.
Nejsem si těď jistý, jestli z hlediska formátování je vůbec možno to jednoduše vypsat jenom za pomocí zamýšleného SQL.
Zkrátka, jestli se lze vůbec PHP vyhnout.

Když už na to budeš muset pustit PHP, tak nějak takto (pokud to bude podle toho ORDER BY):
Prostě tam dáš něco takového:

definuješ pomocné proměnné. Do těch si zapíšeš poslední názvy vypsaného Kraje a Města.
No a jenom, když bude kraj či město nové, tak ho vypíšeš. Jinak znovu ne.
$LastKraj = '';
$LastMesto = '';
A v cyklu while, kde to vypisuje, budeš porovnávat hodnotu aktuálního záznamu s předchozím.
Tedy něco takového:

while ($dotazRow) // smyčka dotazu z DB
{
$AktualniKrajRowRecord = $dotazRow['kraj'];
$AktualniMestoRowRecord = $dotazRow['mesto'];

if ($LastKraj != $AktualniKrajRowRecord)
echo "<h1>". $AktualniKrajRowRecord ."</h1>"; // Toto vypíše velkým např. Středočeský kraj

// a zapíšeme, který kraj byl poslední, pro příští porovnání:
$LastKraj = $AktualniKrajRowRecord ;


//a to samé pro město
if ($LastMesto != $AktualniMestoRowRecord)
echo $AktualniMestoRowRecord . "\t" . $dotazRow['datum'] . "\t" . $dotazRow['tkosp_akce']   ; // Tady výpíše velkým např. Beroun
else
echo "\t\t" . $dotazRow['datum'] . "\t" . $dotazRow['tkosp_akce']   ; // Tady tedy vypíše také vše, kromě města

$LastMesto = $AktualniMestoRowRecord;  // Uložení pro další průchod

}
Takhle získáš úplnou a jednoduchou kontrolu nad tím, jak to vypisovat jen 1x
Uvidíme, co na to ostatní rádci. Tohle je první, co mě napadlo.


//Editace

A pokud bys bojoval s dotazem, že ti vypíše více záznamů opakovaně, tak použiješ DISTINCT na ID, tady je na něho demo:
https://www.w3schools.com/sql/trysql.asp?filename= trysql_select_distinct
Pivu a IT přece rozumí každý...

↑ Odpovědět


Re: Dotaz do MySQL poslední

Administrátor Jan Fiala, 18.05.2017 06:25
Presne tak.
To vypisovani je vec klienta, reportu, aby pri opakujicich se hodnotach ignoroval a vypsal dalsi az pri zmene.
Slo by to i na strane serveru, ale bylo by to zbytecne ohybani - musel bys tam ten udaj ve sloupecku mit 2x (jednou kvuli razeni), pak to v cyklu projit a vyhazet z toho druheho sloupecku. Prace navic ve srovnani s klientem.
Všichni chtějí vaše dobro. Nedejte si ho vzít!

↑ ← Odpovědět


TOPlist