Autor | Zpráva | ||
---|---|---|---|
arkjnu Profil * |
#1 · Zasláno: 23. 4. 2012, 13:09:33
Dobrý den,
pomocí databáze MySQL a PHP vytvářím zdarma program pro sportovní neziskovou organizaci, který spravuje evidenci předplacených vstupů. Nyní jsem narazil na jeden problém a prosím o pomoc. Zjednodušený popis situace: Mám dvě MySQL tabulky, v první (č.1) je evidováno zakoupení předplacených vstupů, má tedy sloupce ID_predplacenky, TERMIN_expirace, POCET_vstupu. Ve druhé tabulce (č.2) se eviduje čerpání zakoupených vstupů. Ta má sloupce ID_cerpani, ID_predplacenky_cerpani. (Ve skutečnosti mají tabulky ještě více sloupců, ale to není pro tento případ podstatné, každý jeden záznam v tabulce č.2 znamená čerpání jednoho vstupu z předplacenky jejíž id je ve sloupci ID_predplacenky_cerpani). Nyní potřebuji zjistit ID_predplacenky, která bude co nejdříve expirovat, ale jsou na ní ještě nějaké volné vstupy. A též celkový počet předplacených vstupů. Slovně tento příkaz vypadá takto: Z tabulky č.1 vyber všechny předplacenky, jejichž datum expirace je větší než dnešní datum (tzn. které ještě neexpirovali) a setřiď je vzestupně podle data expirace. Poté procházej postupně nalezené záznamy a u každého hodnotu POCET_vstupu porovnej s počtem nalezených záznamů v tabulce č.2, které mají ve sloupci ID_predplacenky_cerpani číselnou hodnotu stejnou jako je ID_predplacenky. Pokud je počet nelezených záznamů v tabulce č.2 menší než počet předplacených vstupů u dané předplacenky bude výstupem dotazu číslo předplacenky (neboť právě tato předplacenka obsahuje minimálně jeden volný vstup a lze z ní čerpat), pokud je počet nalezených záznamů v tabulce č. 2 roven počtu předplacených vstupů dané předplacenky, pak pokračuj na další předplacenku. Pokud jsou všechny předplacenky v tabulce č.1 vyčerpané nebo žádné předplacenky nejsou v tabulce č.1 nalezeny bude počet předplacených vstupů roven nule. V současné době pomocí algoritmu níže dokážu zjistit počet zbývajících vstupů ze všech permanentek, které ještě neexpirovali, ale nemám v něm vyřešeno zjištění ID předplacenky, ze které se má čerpat tj. ta na které jsou ještě volné vstupy a bude co nejdříve expirovat. $zbyva=0; $nalezeno_kredit = mysql_query("SELECT * FROM `tab.c.1` WHERE `datum_expirace` > now()"); if (mysql_num_rows($nalezeno_kredit)>0){ while ($nalezeno_pole = mysql_fetch_array($nalezeno_kredit)): $pocet_jednotek=$nalezeno_pole["POCET_vstupu"]; $nalezeno_debet = mysql_num_rows(mysql_query("SELECT * FROM `tab.c.2` WHERE `ID_predplacenky_cerpani` = '".$nalezeno_pole["ID_predplacenky"]."'")); $zbyva=$zbyva+($pocet_jednotek-$nalezeno_debet); endwhile; } Prosím o radu či úpravu kódu, jak mám ID předplacenky zjistit, popř. prosím o optimalizaci dotazu MySQL, neboť nyní to řeším především přes PHP a možná by to šlo vyřešit i rychleji přímo přes MySQL dotaz. Předem děkuji |
||
Kajman Profil |
#2 · Zasláno: 23. 4. 2012, 13:33:19
SELECT t1.*, (SELECT Count(*) FROM `tab.c.2` t2 WHERE t2.`ID_predplacenky_cerpani` = t1.`ID_predplacenky`) cerpani FROM `tab.c.1` t1 WHERE t1.`datum_expirace` >= '2010-04-23' |
||
Časová prodleva: 12 let
|
0