Autor Zpráva
gurgen
Profil
Nevím podle čeho hledat, abych našel inspiraci na řešení, zřejmě to i špatně
pojmenovávám, prosím o radu.

Využívám strukturu databáze bez používání cizích klíčů a nyní jde o to, že mám
databázi zaměstnanců a ošetřujících lékařů. Záznamy následně vkládám do jedné
tabulky pomocí php vše píšu. Nyní jde o to, že bych chtěl, aby pokud smažu z
tabulky záznam jednoho ošetřujícího lékaře, aby se kontrolovalo, zdali mu není
přiřazen nějaký zaměstnanec. Pokud ano, nepovolit jeho smazání, dokud nezruším
postupně všechnu provázanost.
Bertram
Profil
gurgen:
Nevím podle čeho hledat

vazební tabulky
transakce
aDAm
Profil
Před mazáním lékaře se prvně dotaž do tabulky zaměstnanců na poček záznamů které mu jsou přiřazeny a pokud to bude 0 tak smaž.
gurgen
Profil
Díky kluci, ještě se zeptám, co spíše bude přípustné

Select Count(*) from zamestnanci WHERE lekar_id=lekar_id

nebo
Select lekar_id from zamestnanci
pcmanik
Profil
gurgen:
Ten prvý dotaz ti vráti 0 alebo 1 podľa toho či je daný lekár v tabuľke.
Ten druhý dotaz ti ale vráti všetkých lekárov.
Alphard
Profil
Opravdu chcete nevratně smazat záznam lékaře? Nebylo by lepší jen změnit nějaký příznak, že už u vás nedělá, ale jeho existenci a minulé vazby zachovat?
gurgen
Profil
smazat spíše jen v případě, kdy se nebudou na něj vázat jiné záznamy, jinak upozormit, proč nedošlo k smazání

postačí tedy poté dát něco jako podmínku pro ověření z prvního dotazu

if ($pocet = 0)

nebo jdu na to špatně? Že by se muselo pracovat s

if (lekar_id = lekar_id)
Alphard
Profil
gurgen:
if ($pocet = 0)
V PHP je porovnávací operátor ==, uvedené přiřazení se vždy vyhodnotí jako false.

Jestli vám rozumím, tak vyjít z prvního dotazu v [#4]. Zjistit počet zasměstnanců, kterým je přiřazen konkrétní lékař.
gurgen
Profil
Alphard:

dotaz ok, ale pak se mi divně vyhodnocují podmínky

            $query = "SELECT COUNT(*) FROM zamestnanci WHERE lekar_id='". $lekar_id ."'";
            $dotaz = mysql_query ($query, $spojeni);
            
            $vazba = mysql_num_rows($dotaz);
            
            if ($vazba == $vazba) {
            echo 'Nelze smazat lékaře!';
            } else {
            
            zde bude pokracovat dotaz pro smazani lekare

co prosím dělám chybně?
Alphard
Profil
gurgen:
co prosím dělám chybně?
Nepřemýšlíte, co máte v jaké proměnné.

V $dotaz je výsledek z databáze, vždy jeden řádek obsahující počet záznamů splňující podmínku. mysql_num_rows() je přebytečné, stačí vytáhnout tu hodnotu – mysql_result($dotaz, 0, 0); Snad si na syntaxi vzpomínám správně, extenze mysql_* je minulostí, bude zrušena.

Dále podmínka na 6. řádku nedává smysl. Porovnáváte proměnnou se sebou samou, to bude vždy true (bude-li existovat). Lepší by bylo porovnávat s nějakou konstantou, např. if ($vazba > 0)

Pak už by to mohlo fungovat.
aDAm
Profil
pcmanik:
Select Count(*) from zamestnanci WHERE lekar_id=lekar_id
Ten prvý dotaz ti vráti 0 alebo 1 podľa toho či je daný lekár v tabuľke.
seš si jistý? Nemělo by to spíše vrátit počet řádků ?
gurgen
Profil
Alphard:
tak jsem zkusil následující úpravu, ale zase to maže za jakých koliv podmínek

            $query = "SELECT COUNT(*) FROM zamestnanci WHERE lekar_id='". $lekar_id ."'";
            $dotaz = mysql_query ($query, $spojeni);
            
            $vazba = mysql_result($dotaz, 0, 0);
            
            if ($vazba > 0) {
            echo 'Nelze smazat lékaře!';
            } else {
            
            zde bude pokracovat dotaz pro smazani lekare
Alphard
Profil
Na první pohled tam nevidím žádnou chybu, mělo by to fungovat. Vypište si obsah $vazba, případně i dalších proměnných.
gurgen
Profil
Alphard:
s tímto „$vazba = mysql_result($dotaz, 0, 0);
mi to vypisuje 0

a s mojim původním
$vazba = mysql_num_rows($dotaz);
zase 1

tak zkusím pohledat ještě v jiných proměnných, i tak děkuju za navedení k celé problematice bez cizích klíčů

edit: můžeš mi prosím ještě vysvětlit konstrukci mysql_result($dotaz, 0, 0); třeba zde bude něco chybně
Kajman
Profil
gurgen:
a s mojim původním zase 1

Ale tu jedničku to vypíše s jakýmkoliv $lekar_id. Pokud dotaz nepadne na chybné syntaxi, tak vrátí vždy jeden řádek.

Zkuste si dotaz např. v admineru, ať víte, co vrací. Při tom si i zkontrolujte, co vrací dotaz s konkrétní hodnotou $lekar_id, která Vás trápí. A tu si z php vypište, ať vyloučíte chybu v ní.

vysvětlit konstrukci mysql_result

Stačí na ni v kódu kliknout, v manuálu jsou parametry popsány.

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: