Autor Zpráva
peta
Profil
Vedel by nekdo dotaz pro vypsani vsech kolizi v tabulce rezervaci uceben?
Mozna by stacil script, ktery by nasel kolizi pro prave vkladany zaznam, abych mel jistotu, ze je tam OK. Tam jsem nepochodil, kdyz jsme zadal <= a >= .
Momentalne to resim cyklem pro vsechny zaznamy, ale neni to uplne ono.

tabulka vypada takto:
uč datum od - do účel vložil vloženo v
H2 14.01.2008 09:00 - 12:00 zápočet KS,CZV Koxxxova 03.12.2007 1.0
H2 14.01.2008 09:00 - 13:00 zkouška janak 05.12.2007 1.0
H3 11.01.2008 08:00 - 12:10 zkouška Koxxxová 28.11.2007 1.0
H3 11.01.2008 08:50 - 11:20 testy AJ Harxxxová 04.11.2007 1.0

ucebna / datum_od / datum_do / ucel / vlozil_kdo / vlozil_kdy / verze programu ktera vlozeni spachala

Dotazy, co pouzivam, vypadaji asi takto:
$dotaz2 = "SELECT * FROM `".$CFG['SQL_prefix']."rezervace` ORDER BY `ucebna`, `od`, `vlozeno`";

$dotaz1 = "SELECT * ".
" FROM `".$CFG['SQL']['prefix']."rezervace` ".
" WHERE `ucebna` = '$ucebna'".
" AND (($datum_od<`od` AND `od`<$datum_do)".
" OR ($datum_od<`do` AND `do`<$datum_do)".
" OR (`od`<$datum_od AND $datum_od<`do`)".
" OR (`od`<$datum_do AND $datum_do<`do`))";

cili
if ( ($a<$x && $x<$b)
|| ($a<$y && $y<$b)
|| ($x<$a && $a<$y)
|| ($x<$b && $b<$y))

uz jsem se na to driv ptal ...
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=3&topic=65 962
Kajman_
Profil *
kolize...

where ucebna = '$ucebna' and od<'$datum_do' and do>'$datum_od'
peta
Profil
Kajman_
to si predstavujes moc jednoduse :)

podminkou je, aby pridavana rezervace x-y:
- nebyla uvnitr zadane [... x--y ...]
- nebyla kolem jiz zadane x---[...]---y
, proto tolik podminek
a<x<b
a<y<b
x<a<y
x<b<y

ale mozna mne neco napadlo...
Kajman_
Profil *
to si predstavujes moc jednoduse

Je to jednoduché. Stačí nalézt ty, co začínají před koncem a zároveň končí po začátku.

A hledat kolize v již naplněné tabulce také není nic složitého...

select t1.*,'koliduje s',t2.* from rezervace t1, rezervace t2
where t1.ucebna=t2.ucebna and t1.od<t2.do and t1.do>t2.od and t1.id>t2.id
peta
Profil
Mno, ja bych chtel hledat kolizi, ktera jeste neni zapsana.
A samozrejme toto se mi hodi taky, potrebuji tez kontrolu. Dik.
Kazdopadne si to predstavujes prilis jednoduse :)

ucebna='$ucebna' and od<'$datum_do' and do>'$datum_od'
t1.ucebna=t2.ucebna and t1.od<t2.do and t1.do>t2.od and t1.id>t2.id
ucebna && a<y and b>x

podminky vypadaji takto:
...........a.........b...........
.[...].[...a...].[...b...].[...]. 1 2 3 4
...........a..[...]..b........... 5
.......[...a.........b...]....... 6
kolize nastava pri 2 3 5 6. Tyto 4 podminky to musi splnit. Ty pises jenom 2, coz je podivne.
1 a<y NE, b>x ANO, celkem NE - ok
2 a<y ANO, b>x ANO - celkem ANO - ok
5 a<y ANO, b>x ANO - celkem ANO - ok
3 a<y ANO, b>x ANO - celkem ANO - ok
4 a<y ANO, b>x NE - celkem NE - ok
6 a<y ANO, b>x ANO - celkem ANO - ok
Hm, tak asi jo. Jeste to musim promyslet, dik :)

jeste to napisi uplne, kdyby to nekdo potreboval
x<y
a<y
b>x
1
x<a y<a
x<b y<b
2
x<a y>a
x<b y<b
3
x>a y>a
x<b y>b
4
x>a y>a
x>b y>b
5
x>a y>a
x<b y<b
6
x<a y>a
x<b y>b

Mno, a jeste vyzkouset a doplnit rovnitka :)
Kajman_
Profil *
Ty pises jenom 2, coz je podivne.

Je divné, že nedokážete pochopit tak jednoduchou věc. Nezajímají vás termíny, které skončily před začátkem vkládaného a ani ty, které začínají po skončení vkládaného záznamu. Dvě jednoduché podmínky.
peta
Profil
Jasne, ale je treba zkontrolovat, zda tyto podminky vyhovuji rovnici nebo ne. Coz je samozrejme v poradku.
Jinymi slovy, ze ty 4 moznosti vyhovuji rovnici jeste neznamena, ze ostatni 2 platne nekolizni rezervace mohou tez rovnici vyhovovat.
Cili o nic neslo, jen jsem tve podminky proveroval a jsou v poradku.

Bylo by jednodussi si to vypsat hned na zacatku kompletne a najit shodu.
peta
Profil
Ten dotaz
$dotaz2 = "SELECT `t1`.*,'koliduje s',`t2`.* FROM `".$CFG['SQL_prefix']."rezervace` `t1`, `".$CFG['SQL_prefix']."rezervace` `t2` WHERE `t1`.`ucebna`=`t2`.`ucebna` AND `t1`.`od`<`t2`.`do` AND `t1`.`do`>`t2`.`od` AND `t1`.`id`>`t2`.`id` ORDER BY `t1`.`ucebna`, `t1`.`od`, `t1`.`vlozeno`";
Ma jednu takovou drobnou chybu. Nezobrazi mi par ke kolizni rezervaci v pripade, ze kolize nastava pouze u 2 pripadu. Je mi jasny, ze tam jde o spravnou podminku a zrovna tohle nestaci `t1`.`id`>`t2`.`id` . S tim si snad nejak poradim, zkusim jiny zapis, mozna SELECT v SELECTu

... vyreseno
SELECT na
SELECT DISTINCT
`t1`.`id`>`t2`.`id` na
`t1`.`id`!=`t2`.`id`
Kajman_
Profil *
Tipnul bych, že v aplikaci nevypisuje všechny sloupečky, jinak tam uvidíte oba kolizní termíny v jednom řádku.

Zkuste si ten dotaz s > např. v pma, ať víte o čem mluvím.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0