Autor Zpráva
Jzikes
Profil
Zdravím,
v MySQL mám dvě tabulky ("rejstrik_A" a "rejstrik_B"). V tabulce rejstrik_A mám sloupce: Autor, Nazev, Rok, Rocnik, Cislo, Strana, Misto a ID. V tabulce rejstrik_B mám sloupce: Lokalita, Region a ID. Potřeboval bych aby když budu vyhledávat v tabulce "rejstrik_B" ve sloupci Lokalita, aby to našlo i řádky v tabulce "rejstrik_A" se společným polem ID.

Už se na to snažím přijít druhý den a prolistoval sem několik knížek a stránek na internetu, ale pořád si nevím rady. Prosím jestli byste mi nemohli poradit

Děkuji
J. Zikeš
Kajman
Profil
SELECT *
FROM   rejstrik_b b
       LEFT JOIN rejstrik_a a
              ON b.id = a.id
WHERE  b.lokalita = 'Praha'
Jzikes
Profil
Děkuji už to funguje!!!

Tady je zdroják:
$ziskat = MySQL_Query ("SELECT * FROM Rejstrik_B LEFT JOIN Rejstrik_A ON Rejstrik_B.ID = Rejstrik_A.ID WHERE Lokalita LIKE '%".$search."%'",$spojeni);
while ($vypsat = mysql_fetch_array($ziskat))
{

echo("<strong>".$vypsat['Autor']." (".$vypsat['Rok'].")".": "."</strong>".$vypsat['Nazev'].". −Minerál, "."<strong>".$vypsat['Rocnik']."</strong>".", ".$vypsat['Cislo'].", "."<em>".$vypsat['Strana']."</em>".". ".$vypsat['Misto']."."."<br  />");

};

J. Zikeš
Jzikes
Profil
Zdravím,
potřebuji to trochu upravit... Zadat více podmínek!

Normálně to není problém:
$ziskat = MySQL_Query("SELECT * FROM Rejstrik_A WHERE Autor LIKE '%".$autor."%' AND Nazev LIKE '%".$nazev."%' AND Rok LIKE '%".$rok."%'",$spojeni);

Ale pokud potřebuji jednu podmínku jako spojení s druhou tabulkou nevím jestli to mám rozdělit do dvou proměných
$ziskat = MySQL_Query("SELECT..............
$ziskat_2 = MySQL_Query("SELECT * FROM ... LEFT JOIN..
A pak to nějak spojit nebo existuje nějaké jiné řešení!

Děkuji za odpověď
J. Zikeš
Kajman
Profil
Podmínky můžete spojovat operátory and, or i jinými. Pokud chcete mít řádky z více zdojů, existuje příkaz union. Ale těžko říct, s čím jste narazil. Zkuste jasně sdělit, o co vám jde a s čím máte problémy.
Jzikes
Profil
Mám databázi s dvěma tabulkami (A a B), ve kterých chci vyhledávat. Vyhledávající formulář má 4 okénka (Autor, název, rok a lokalita). S prvními třemi nemám problém:
$ziskat = MySQL_Query("SELECT * FROM Rejstrik_A WHERE Autor LIKE '%".$autor."%' AND Nazev LIKE '%".$nazev."%' AND Rok LIKE '%".$rok."%'",$spojeni);´
Ale pokud potřebuji přidat vyhledávání ve sloupci, který je ve druhé tabulce. Nevím jak to spojit. V případě, že bych to nespojoval bylo by to nějak takto:
$ziskat = MySQL_Query ("SELECT * FROM Rejstrik_B LEFT JOIN Rejstrik_A ON Rejstrik_B.ID = Rejstrik_A.ID WHERE Lokalita LIKE '%".$search."%'",$spojeni);
A teď tedy potřebuju nějaký způsob jak to spojit.

Když tak ten formulář je na: http://zikmundovo-blog.wz.cz/rejstrik

J. Zikeš
Kajman
Profil
Je to prosté, uděláte ono spojení tabulek a použijete and operátor. Pro možnou kolizi názvů sloupců je vhodné jejich jednoznačné určení.
SELECT *
FROM   Rejstrik_A AS A
       JOIN Rejstrik_B AS B
         ON A.ID = B.ID
WHERE  A.Autor LIKE '%$autor%'
       AND A.Nazev LIKE '%$nazev%'
       AND A.Rok = '$rok'
       AND B.Lokalita LIKE '%$search%' 

Jen ty podmínky by bylo dobré přidávat jen když ve formuláři byla hodnota vyplněna. A také je vhodné hodnoty escapovat díky mysql_real_escape_string.
Jzikes
Profil
Zdravím,
udělal jsem to takhle, ale funguje jen vyhledávání ve druhé tabulce (Rejstrik_B) inputy autor a rok nefungují!!:
$ziskat = MySQL_Query("SELECT * FROM Rejstrik_A AS A JOIN Rejstrik_B AS B ON A.ID = B.ID WHERE A.Autor LIKE '%".$autor."%' AND A.Nazev LIKE '%".$nazev."%' AND A.Rok LIKE '%".$rok."%' AND B.Lokalita LIKE '%".$lokalita."%'",$spojeni);

Jinak ale díky...
J. Zikeš


Omluvám se,
funguje to dobře, ale jen s lokalitou. Jak mám docílit toho, aby když lokalitu nevyplním vyhledávalo to třeba podle autora všude.
Kajman
Profil
Když nevyplní lokalitu, nedávejte podmínku na lokalitu do where a nedělejte join na druhou tabulku.
Jzikes
Profil
Děkuji

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: