Autor | Zpráva | ||
---|---|---|---|
gurgen Profil |
#1 · Zasláno: 20. 1. 2014, 05:52:23
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 |
#2 · Zasláno: 20. 1. 2014, 06:08:59
gurgen:
„Nevím podle čeho hledat“ vazební tabulky transakce |
||
aDAm Profil |
#3 · Zasláno: 20. 1. 2014, 10:12:33
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 |
#4 · Zasláno: 22. 1. 2014, 16:11:38
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 |
#5 · Zasláno: 22. 1. 2014, 16:35:41
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 |
#6 · Zasláno: 22. 1. 2014, 18:28:33
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 |
#7 · Zasláno: 22. 1. 2014, 19:03:05
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 |
#8 · Zasláno: 22. 1. 2014, 19:12:16
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 |
#9 · Zasláno: 23. 1. 2014, 03:33:44
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 |
#10 · Zasláno: 23. 1. 2014, 04:06:28
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 |
#12 · Zasláno: 23. 1. 2014, 15:58:43
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 |
#13 · Zasláno: 23. 1. 2014, 23:05:10
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 |
#15 · Zasláno: 24. 1. 2014, 08:37:52
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. |
||
Časová prodleva: 11 let
|
0