Spojení dvou tabulek – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojení dvou tabulek – MySQL – Fórum – Programujte.comSpojení dvou tabulek – MySQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Forest0
Stálý člen
10. 11. 2013   #1
-
0
-

Ahoj, potřeboval bych prosím pomoct. Snad to vysvětlím dostatečně ...

Mám dvě tabulky

tabulka1

Připojen obrázek.

tabulka2

Z první tabulky (tabulka1) vypisuji všechny udaje:

$dotaz = mysql_query("SELECT * FROM tabulka1");

while($data = mysql_fetch_assoc($dotaz))
{
$_POST["id1"] = $data["id1"];
$_POST["nazev1"] = $data["nazev1"];
}

Tento dotaz mi vypíše:

1 Fori

2 Foris

A já bych potřeboval v tom dotazu říct, aby mi nevypisoval data, která už jsou v té druhé tabulce (tabulka2), tudíž potřebuji, aby mi aktuální obsah tabulky vypsal pouze 2 Foris, protože 1 Fori už je v druhé tabulce (tabulka2)

Snad jsem to nezkomolil. Díky předem za pomoc :-)

Připojen obrázek.

Nahlásit jako SPAM
IP: 92.62.230.–
Kowalsky950
Stálý člen
10. 11. 2013   #2
-
0
-

   

SELECT * FROM prvni
UNION
SELECT * FROM druha WHERE NOT EXISTS
	(SELECT id FROM prvni WHERE prvni.jmeno=druha.jmeno);


Tohle funguje, ale dotazy musí mít stejné typy vrácených dat.
A ještě jedna věc: příkaz EXISTS() se vyhodnocuje na každý řádek, tkaže jestliže tam budeš mít 1000 záznamů v druhé tabulce, tak se zavolá 1000x select v tom EXISTS, což bere poměrně výkon.

Nahlásit jako SPAM
IP: 90.176.114.–
Kowalsky950
Stálý člen
10. 11. 2013   #3
-
0
-

#2 Kowalsky95
Btw napsal jsem blbost, samotné UNION ti odstraní duplicitu, takže ti stačí zavolat pouze
 

SELECT * FROM prvni
UNION
SELECT * FROM druha;

kdyby si tam ty duplicity chtěl nechat, jen tam dáš UNION ALL.

Nahlásit jako SPAM
IP: 90.176.114.–
Ericsko+3
Stálý člen
10. 11. 2013   #4
-
0
-

#3 Kowalsky95
Neviem, ci si mu tymto pomohol, to vobec neriesi jeho problem.

Okrem toho by stacilo: 

SELECT * FROM tabulka1 WHERE nazev1 NOT IN (SELECT nazev2 FROM tabulka2)
Nahlásit jako SPAM
IP: 88.212.34.–
Kowalsky950
Stálý člen
10. 11. 2013   #5
-
0
-

#4 Ericsko
Jo špatně jsem pochopil zadání. Myslel jsem že chce vypsat obě tabulky v jedné, s tím že nechce vypsat dvakrát stejné hodnoty.

V tomto případě máš samozřejmě pravdu.

Nahlásit jako SPAM
IP: 90.176.114.–
Forest0
Stálý člen
10. 11. 2013   #6
-
0
-

#4 Ericsko
Tam je ještě jiný problém. To jsem nevychytal ...

EDIT: Zkusím dodat jiný materiál a popsat to lépe :-)

Nahlásit jako SPAM
IP: 92.62.230.–
Forest0
Stálý člen
10. 11. 2013   #7
-
0
-

tabulka1
 

Připojen obrázek.


tabulka2
 

Připojen obrázek.



Mám uložené ID v:

$_SESSION["ID"]

A já vlastně vypisuji celý obsah tabulky1, jenže potřebuji, aby se pro každé ID ten obsah vypsal jinak a to podle existujících/neexistujících záznamů v tabulce2.

To znamená, že podle obrázku by se uživateli ID1 vypsalo:
 

Fori - existuje
Joe - existuje
John - existuje

ID2:
 

Fori - existuje
Joe - existuje
John - existuje


ID3:
 

Fori - existuje
Joe - neexistuje
John - neexistuje


Tak snad teď už dojdeme k tomu správnému. Děkuji :-)

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #8
-
0
-

k cemu ti tam vubec je to ID? ocividne ho k nicemu nepouzivas.. tabulky indexujes nejakejma retezcema a tak je zbytecny to tam vubec mit

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
10. 11. 2013   #9
-
0
-

#8 KIIV
Jak nepoužívám? Snad v druhé tabulce vidíš, že jsou tam stejné hodnoty, ale liší se ID. Dokážeš mi pomoct? Díky.

Btw. Mluvím o příspěvku #7

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #10
-
0
-

ja zase ze ho nepouzivas k vazbam mezi tabulkama v databazi... v tom ID muze byt s klidem i ten nazev a nic se nestane (teda kdom problemu s rychlosti, kdyby se to nejakou nahodou muselo pozuzit ve velkem :))

z toho prispevku moc nechapu o co se snazis...

pravdepodobne hledas jen inner join

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
10. 11. 2013   #11
-
0
-

#10 KIIV
Asi ano, já už nevím, jak to líp vysvětlit ...

Nahlásit jako SPAM
IP: 92.62.230.–
Řešení
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #12
-
0
-
Vyřešeno Nejlepší odpověď

#11 Forest
tak to dej dohromady... navodu je vsude hromada

select * from tabulka1 inner join tabulka2 on (tabulka2.nazev2 = tabulka1.nazev1) where id2=...

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Spojení tabulek — založil Paja2

Rychlost spojení tabulek — založil BigBear

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý