Autor Zpráva
r0me0
Profil
Zdravím, potřeboval bych poradit s SQL dotazem... mám tabulky tab_zavody, tab_sampionaty, tab_vztahy. Do tab_vztahy si ukládám název závodu a název šampionátu, abych věděl, který závod je ke kterému šampionátu přiřazen, přičemž jeden závodu může být přiřazen k více šampionátům (měl bych tam ukládat id, já vím... to teď neřešme :) ). Takže potom mám cyklus, ve kterém je dotaz, který mi vypíše šampionát a pod něj všechny přiřazené závody a další šampionát a pod něj zase všechny přiřazené závody atd. A ty závody chci řadit podle data jejich začátku (v mysql datový typ DATETIME). Jenže to mi neřadí. Přidávám sem strukturu tabulek i dotaz.

CREATE TABLE `tab_vztahy` (
`vz_sampionat` varchar(100) collate utf8_czech_ci default NULL,
`vz_zavod` varchar(100) collate utf8_czech_ci default NULL,
`vz_novinka` varchar(100) collate utf8_czech_ci default NULL,
`vz_obrazek` varchar(30) collate utf8_czech_ci default NULL,
`vz_galerie` varchar(40) collate utf8_czech_ci default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

CREATE TABLE `tab_sampionaty` (
`samp_id` int(11) NOT NULL auto_increment,
`samp_specifikace` varchar(100) collate utf8_czech_ci default NULL,
`samp_jmeno` varchar(100) collate utf8_czech_ci default NULL,
`samp_rocnik` mediumint(9) default NULL,
`samp_lokalita` varchar(100) collate utf8_czech_ci default NULL,
`samp_stranky` varchar(100) collate utf8_czech_ci default NULL,
`samp_priorita` int(11) NOT NULL,
PRIMARY KEY (`samp_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=14 ;

CREATE TABLE `tab_zavody` (
`zav_id` int(11) NOT NULL auto_increment,
`zav_specifikace` varchar(100) collate utf8_czech_ci default NULL,
`zav_nazev` varchar(30) collate utf8_czech_ci default NULL,
`zav_rocnik` mediumint(9) default NULL,
`zav_koeficient` mediumint(9) default NULL,
`zav_celkova_delka` float default NULL,
`zav_celkova_delka_rz` float default NULL,
`zav_zacatek` datetime default NULL,
`zav_konec` datetime default NULL,
`zav_pocet_rz` mediumint(9) default NULL,
`zav_pocet_etap` mediumint(9) default NULL,
`zav_lokalita` varchar(100) collate utf8_czech_ci default NULL,
`zav_stranky` varchar(50) collate utf8_czech_ci default NULL,
`zav_priorita` int(11) default NULL,
PRIMARY KEY (`zav_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=15 ;

mysql_query("SELECT tab_vztahy.vz_zavod FROM (tab_vztahy,tab_zavody) WHERE vz_sampionat = '$nazev' AND vz_zavod IS NOT NULL GROUP BY tab_vztahy.vz_zavod ORDER BY tab_zavody.zav_zacatek ASC ");

nevypisuje mi to žádnou chybu, jen se závody prostě neřadí podle datumu, za případnou pomoc velice děkuji!
Kajman_
Profil *
Co vypíše tenhle select v druhém sloupečku?

SELECT tab_vztahy.vz_zavod, group_concat(tab_zavody.zav_zacatek) zacatky
FROM (tab_vztahy,tab_zavody)
WHERE vz_sampionat = '$nazev' AND vz_zavod IS NOT NULL
GROUP BY tab_vztahy.vz_zavod
ORDER BY tab_zavody.zav_zacatek ASC


Vypadá to totiž, že tam nemáte ve where podmínku na vazbu nezi tab_vztahy a tab_zavody, tak se udělá kartezký součin všeho se vším.

pozn: pokračování tohoto
http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=79646&foru m=28&page=-1
r0me0
Profil
Kajman_
děkuji za odpověď. Já jsem se s takovým zápisem v SQL bohužel nesetkal, nevím jak ten sloupec vypsat.
Zkoušel jsem:

while($inf = mysql_fetch_array($qry))
{
echo $inf['zacatky']."<br />";
}

ale nic to nevypsalo
Kajman_
Profil *
Vypisuje to to dobře... pokud to tedy vrátilo nějaké řádky. Tak ještě zkuste tohle.
SELECT tab_vztahy.vz_zavod, tab_zavody.zav_zacatek
FROM (tab_vztahy,tab_zavody)
WHERE vz_sampionat = '$nazev' AND vz_zavod IS NOT NULL
GROUP BY tab_vztahy.vz_zavod, tab_zavody.zav_zacatek
ORDER BY tab_zavody.zav_zacatek ASC, tab_vztahy.vz_zavod


A klidně ty dotazy skoušejte v phpmyadminovi, mysql query browseru... nemusíte to programovat do php - stačí jen nahradit ten $nazev.
r0me0
Profil
Kajman_

tak v phpmyadminovi to vyplsalo tohle:
Agrotec rally Hustopeče 2007-01-01 12:00:00
Barum Rally 2007-01-01 12:00:00
Rally Bohemia 2007-01-01 12:00:00
Rally Šumava 2007-01-01 12:00:00
Rally Vysočina 2007-01-01 12:00:00
Valašská rally 2007-01-01 12:00:00
Agrotec rally Hustopeče 2007-06-12 00:00:00
Barum Rally 2007-06-12 00:00:00
Rally Bohemia 2007-06-12 00:00:00
Rally Šumava 2007-06-12 00:00:00
Rally Vysočina 2007-06-12 00:00:00
Valašská rally 2007-06-12 00:00:00
Agrotec rally Hustopeče 2007-07-21 00:00:00
Barum Rally 2007-07-21 00:00:00
Rally Bohemia 2007-07-21 00:00:00
Rally Šumava 2007-07-21 00:00:00
Rally Vysočina 2007-07-21 00:00:00
Valašská rally 2007-07-21 00:00:00
Agrotec rally Hustopeče 2007-11-16 20:00:00
Barum Rally 2007-11-16 20:00:00
Rally Bohemia 2007-11-16 20:00:00
Rally Šumava 2007-11-16 20:00:00
Rally Vysočina 2007-11-16 20:00:00
Valašská rally 2007-11-16 20:00:00
Agrotec rally Hustopeče 2007-12-01 12:00:00
Barum Rally 2007-12-01 12:00:00
Rally Bohemia 2007-12-01 12:00:00
Rally Šumava 2007-12-01 12:00:00
Rally Vysočina 2007-12-01 12:00:00
Valašská rally 2007-12-01 12:00:00

ale v php pořád nemůžu vypsat nic
Kajman_
Profil *
No vidíte... máte v tom dotazu ke každému závodu 5 různých časů. Přidejte si do where tu vazební podmínku.
r0me0
Profil
Kajman_
No teď se mi zkombinovaly všechny hodnoty ze zav_zacatek se všemi hodnotami z vz_zavod jestli to hcápu dobře. To s tou where vazební podmínkou nechápu... Teď tam mám duplikované hodnoty ne? Ty jsem myslel, že odstraním právě tím group by, jenže pak už to nešlo seřadit. Takže teď tam mám group by i duplikované hodnoty a seřazené to vypadá, ale co s tím, to nevím.
Kajman_
Profil *
Jaký máte vztah mezi tab_vztahy a tab_zavody?
r0me0
Profil
Kajman_

jestli myslíte nějakou vazbu, tak to žádnou, ani nevím jak se dělají v mysql...

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: