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.

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é…
Squad_leader 18.05.2017 01:52
Squad_leader
Presne tak. To vypisovani je vec klienta, reportu, aby pri opakujicich se hodnotach ignoroval a vyps…
Jan Fiala 18.05.2017 06:25
Jan Fiala
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…
čitateľ 05.07.2017 11:28
čitateľ
Místo otázky raději poraď. Změnil jsem $result na $dotazRow = mysql_query("SELECT * FROM tkosp_akce…
Kráťa 06.07.2017 05:02
Kráťa
Máš tam nekonečnú slučku. Vo while nemáš riadok..
čitateľ 06.07.2017 05:30
čitateľ
Aha, já tam neměl endwhile a vznikla nekonečná smyčka. To jsem ale mamlas.
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…
Squad_leader 05.07.2017 21:19
Squad_leader
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

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.

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

Podľa všetkých tvojich otázok čo som videl, tak problém je v tom, že sa zaoberáš vecami ktorým absolútne nerozumieš.
A tomu zase ja nerozumiem, prečo sa človek tlačí do niečoho o čom nemá ani páru.

blbá (najblbšia) otázka: čo máš v $dotazRow?

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