Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Dotaz do MySQL

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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ahoj, koukám, že ještě taky nespíš :-D. Tahle věc by se dala velice pěkně naskriptovat v PHP, které…
Flash_Gordon 18.05.2017 01:52
Flash_Gordon
Tak až teď se k tomu vracím, jelikož už tam je asi 40 akcí. Vložil jsem to <?php include "pripoj.ph…
Kráťa 05.07.2017 11:19
Kráťa
Podľa všetkých tvojich otázok čo som videl, tak problém je v tom, že sa zaoberáš vecami ktorým absol… nový
pozorovateľ 05.07.2017 11:28
pozorovateľ
Místo otázky raději poraď. Změnil jsem $result na $dotazRow = mysql_query("SELECT * FROM tkosp_akce… nový
Kráťa 06.07.2017 05:02
Kráťa
Máš tam nekonečnú slučku. Vo while nemáš riadok.. nový
pozorovateľ 06.07.2017 05:30
pozorovateľ
Aha, já tam neměl endwhile a vznikla nekonečná smyčka. To jsem ale mamlas. nový
Kráťa 06.07.2017 06:23
Kráťa
Ano, používáš tam $dotazRow, plníš někde tuto proměnnou? I když to je zvláštní, mělo by to psát ale… nový
Flash_Gordon 05.07.2017 21:19
Flash_Gordon
Jsem to nakonec udělal pro každý kraj do samostatného fieldsetu se samostatným dotazem do db a je to… poslední
Kráťa 08.07.2017 02:07
Kráťa

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

Tak až teď se k tomu vracím, jelikož už tam je asi 40 akcí. Vložil jsem to

<?php
include "pripoj.php";

$vse = mysql_query("SELECT * FROM tkosp_akce");
$pocetVse = mysql_num_rows($vse);
echo "<h3>Vloženo je " . $pocetVse . " akcí</h3>";

$result = mysql_query("SELECT * FROM tkosp_akce ORDER BY krajakce,mestoakce,datumakce");

$LastKraj = '';
$LastMesto = '';

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

}
?>

a nevypisuje se nic. Myslel jsem, že tam budou kraje a města a že doplním ostatní. :-( Co dělám blbě?
http://orbipontes.unas.cz/tkosp-formular/program-v ypis-jednou.php
Já mám výpis takto
http://orbipontes.unas.cz/tkosp-formular/program-2 017.php

Místo otázky raději poraď. Změnil jsem $result na

$dotazRow = mysql_query("SELECT * FROM tkosp_akce ORDER BY krajakce,mestoakce,datumakce");

$LastKraj = '';
$LastMesto = '';

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 píše
Fatal error: Maximum execution time of 30 seconds exceeded in /3w/unas.cz/o/orbipontes/tkosp-formular/program-vy pis-jednou.php on line 47
na řádku 47 je if ($LastKraj != $AktualniKrajRowRecord)

Ano, používáš tam $dotazRow, plníš někde tuto proměnnou?

I když to je zvláštní, mělo by to psát alespoň nějakou chybu.

Šoupni si zapnutí výpisu chyb.
Vlož na začátek skriptu: error_reporting(1);

To by mělo vypisovat všechny chyby.
Tedy za předpokladu, že výsledek dotazu není prázdný.

Zpět do poradny Odpovědět na původní otázku Nahoru