Autor Zpráva
musli
Profil *
Dobré ráno,

už jsem tady jednou psal a pár lidí mě odkazovalo na serial na linuxsoftu, ten jsem si přečetl a zčásti se mi to povedlo to co jsem chtěl, ale přijde mi že to ani nejde, proto se tedy ještě jednou zeptám. V podstatě chci sloučit tyto dva:


$bla = "cokoliv";

$select = mysql_query("SELECT zaznam1, zaznam2 FROM `tabulka1` WHERE zaznam = '".$bla."'");
$result = mysql_fetch_assoc($select);

$select2 = mysql_query("SELECT zaznam3 FROM `tabulka2` WHERE `zaznam1` = '".$result[zaznam1]."'");
$result2 = mysql_fetch_assoc($select2);


přičemž po vyselektování kontroluju jestli v `tabulka2` není záznam, pokud není dělám něco a pokud je tak dělám něco jinýho:

if(mysql_num_rows($result2) != 0)
{
$insert = ("INSERT INTO `tabulka2` (sloupec1, sloupec2, sloupec3) values ($result['zaznam1'], $result['zaznam2']", NOW())");
}
else
{
práce s proměnnou $result2['zaznam3'];
}

vyjádřešní slovně:
jde mi to že mám hlavní tabulku se záznami o uživateli, pak druhou. Člověk si může poslat každý den články. Kdžy si člověk pošle články, uloží se čas odeslání, jeho id a nějaký věci z první tabulky do druhé tabulky, když však odešle znovu zkontroluje jestli jsou v druhé tabulce záznam o dnešním odeslání (resp kontrola probíhá jako první), pokud ano tak hláška o tom že dnes si už poslal a když ne tak samozřejmě záznam se v píše
Alphard
Profil
moc mi nevěř, ale zkus tohle
$result = mysql_query ("select tabulka2.zaznam3 from tabulka1, tabulka2 where tabulka2.zaznam1 = tabulka1.zaznam1");
if (!$result) echo mysql_error();
bukaj
Profil
tohle by se podle mě dalo řešit poddotazem:

$zaznamu = mysql_result(mysql_query("select count(*) from tabulka2 where zaznam1 in (select zaznam1 from tabulka1 where zaznam = '$bla')"), 0, 0);

následně v podmínce můžeš zkoušet:

if($zaznamu != 0){
...
tomask
Profil
select tabula1.zaznam1, tabulka1.zaznam2, tabulka2.zaznam3 from tabulka1, tabulka2 where tabulka2.zaznam1=tabulka1.zaznam1
musli
Profil *
Alphard
není možný co píšeš, ale děkuju

tomask
nepočítáš s proměnnou $bla

bukaj
zajímavý nápad, vůbec mě nenapadl. Bohužel nefunguje, zkouším něco podobnýho. Hlavně potřebuji i zaznam2, který ty neselektuješ
Alphard
Profil
zapomněl jsem $bla
tomask
máš tam překlep tabula1
bukaj
Profil
musli
pokud je druhý result jenom kontrola, jestli se mají zapsat data z prvního resultu, tak to asi ani jinak, než jak jsi to řešil ty nepůjde.
když jsem psal mé řešení nevšiml jsem si, že ještě v té podmínce využíváš data z prvního resultu. myslel jsem tudíž, že ty dva resulty jsou jen na testování, jestli se má něco udělat.
tomask
Profil
select tabula1.zaznam1, tabulka1.zaznam2, tabulka2.zaznam3 from tabulka1, tabulka2 where tabulka2.zaznam1=tabulka1.zaznam1 and tabulka1.zaznam='$bla'
Casero
Profil
tomask
Rychlejší by mohlo být toto:
select t1.zaznam1, t1.zaznam2, t2.zaznam3 from tabulka1 t1 join tabulka2 t2 on t2.zaznam1=t1.zaznam1 where t1.zaznam='$bla'
musli
Profil *
tomask

funguje, jen ještě malá chybička, aby si mohl udělat tabulka2.zaznam1=tabulka1.zaznam1 tak musíš zaznam1 z tabulky2 vytáhnout, a ještě závorky :-) takže:

select tabula1.zaznam1, tabulka1.zaznam2, tabulka2.zaznam3 tabulka2.zaznam1 from tabulka1, tabulka2 where (tabulka2.zaznam1=tabulka1.zaznam1 and tabulka1.zaznam='$bla')

Casero

asi chceš udělat aliasy, to ti chybí "as" před t1 a t2 :-)
----------------------------------------
dělá mi to ještě nějaký chyby, ale teď nevím jestli to není někde chybou v kódu, jelikož se mi nedaří insertovat pokud je mysql_num_rows == 0, zkusím se na to ještě podívat, kdyžtam dám věděl a zeptám se:-) děkuju všem
musli
Profil *
už vím tedy v čem je problém:

používám tedy toto:


select tabula1.zaznam1, tabulka1.zaznam2, tabulka2.zaznam3 tabulka2.zaznam1 from tabulka1, tabulka2 where (tabulka2.zaznam1=tabulka1.zaznam1 and tabulka1.zaznam='$bla')


takže když najde záznam tak je v pořádku, ale pokud nenajde záznam tak nezůstanou proměnný $zaznam1 a $zaznam2. Abych to lépe vysvětlil tak vlastně potřebuju zkontrolovat, pokud však záznam není, tak potřebuju aby právě byli definový proměnný z první tabulky.
Casero
Profil
musli
asi chceš udělat aliasy, to ti chybí "as" před t1 a t2 :-)
"as" se může vynechat ;) A jak jsem psal, přes join je to rychlejší, jelikož nedochází ke kartézskému součinu záznamů tabulek, z kterých se následně podmínkou where vybírá výsledek.
Stoptusin
Profil *
Casero

dobře, omlouvám se, všechny články co jsem četl, tak to nezmiňovali:-)
ale problém to neřeší, protože, i když to nenajde schodu v tabulkách, tak nic nevyselektouje. Potřebuju aby se vyselektovali záznamy z první tabulky a druhý, když mají shodný záznam, pokud ve druhé není nic (takže nedojde ke spojení tabulek), tak vyselektovat první tabulku. Tohle asi jedním dotazem nebude (jak říkal bukaj), nebo jestli se dá použít samotná podmínka v dotazu?
Casero
Profil
Stoptusin
left join?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0