Výběr a spojení dat z více tabulek – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Výběr a spojení dat z více tabulek – MySQL – Fórum – Programujte.comVýběr a spojení dat z více tabulek – MySQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
GRIZLY0
Duch
20. 6. 2013   #1
-
0
-

Zdravím.

Prošel jsem vlákna a nenašel odpověď na svou otázku, Pokud spamuju, tak se omlouvám

Řeším následující problém: Mám tři tabulky této struktury

1) tab_prikazci 

CREATE TABLE IF NOT EXISTS tab_prikazci (		-- vytvoreni tabulek
		`ID` 		INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		`divize`	CHAR(5),
		`ico` 		CHAR(30) UNIQUE KEY,
		`nazev` 	CHAR(50)	UNIQUE KEY)
		ENGINE = InnoDB;

	CREATE TABLE IF NOT EXISTS tab_destinace (
	 	`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		`misto` CHAR(50) NOT NULL UNIQUE KEY);
	
	CREATE TABLE IF NOT EXISTS tab_cena (
		`ID`		INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		`hodnota`  	INT NOT NULL,
		`mena`  	CHAR(6) NOT NULL,
		`platne_OD`	DATE,
		`platne_DO`	DATE,
		`aktualizace` TIMESTAMP)
		ENGINE = InnoDB;
	
	CREATE TABLE IF NOT EXISTS tab_historie (
		`ID`	   INT NOT NULL,
		`DIVIZE`   CHAR(4),
		`PRIKAZCE` CHAR(50),
		`NAKLADKA` CHAR(30),
		`VYKLADKA` CHAR(30),
		`CENA`	   CHAR(6),
		`POZNAMKA` CHAR(100))
		ENGINE = InnoDB;

	CREATE TABLE IF NOT EXISTS tab_kombinace (
		`ID`  INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		`IDp` INT,
		`IDn` INT,	
		`IDv` INT,
		`IDc` INT)
	   ENGINE = InnoDB;

Tabulka tab_kombinace obsahuje číselné hodnoty podle kterých bych chtěl vybírat údaje z ostatních tabulek 

Např:

v tab_prikazci mám

ID   nazev

1   Tesco

v tab_destinace

ID   misto

1   Praha

2   Plzeň

tab_cena

ID hodnota   mena

1   100        CZK

tab_kombinace

IDp   IDn   IDv   IDc

1      2       1    1

Výstup by měl vypadat takto

Tesco  Plzeň Praha 100 CZK

Nedaří se mi ale najít správní dotaz. Zkoušel jsem např toto 

SELECT tab_prikazci.divize, tab_prikazci.nazev FROM tab_prikazci, tab_kombinace WHERE tab_prikazci.ID = tab_kombinace.IDp
 UNION
SELECT tab_destinace.misto FROM tab_destinace WHERE tab_destinace.ID = tab_kombinace.IDc
 UNION
SELECT tab_cena.hodnota, tab_cena.mena FROM  tab_cena, tab_kombinace WHERE	tab_cena.ID = tab_kombinace.IDc

ale nedostal jsem kýžený výsledek. Může mi sím Vás někdo poradit nebo alespoň nakopnout správným směrem?

Děkuji

Nahlásit jako SPAM
IP: 77.48.111.–
Reklama
Reklama
peter
~ Anonymní uživatel
2539 příspěvků
21. 6. 2013   #2
-
+1
-
Zajímavé

   

SELECT a.divize, a.nazev, c.misto, d.hodnota, d.mena
FROM tab_kombinace      a
LEFT JOIN tab_prikazci  b ON b.ID = a.IDp
LEFT JOIN tab_destinace c ON c.ID = a.IDc
LEFT JOIN tab_cena      d ON d.ID = a.IDc
WHERE ...
LIMIT 10,20
Nahlásit jako SPAM
IP: 193.84.207.–
GRIZLY0
Duch
2. 7. 2013   #3
-
0
-

děkuji za reakci.

select jsem upravil takto  


SELECT tab_prikazci.divize, tab_prikazci.nazev, tab_destinace.misto AS 'nakladka', tab_destinace.misto AS 'vykladka', tab_cena.hodnota, tab_cena.mena

  FROM tab_kombinace     
JOIN tab_prikazci  ON tab_prikazci.ID = tab_kombinace.IDp
JOIN tab_destinace ON tab_destinace.ID = tab_kombinace.IDc
JOIN tab_cena  ON tab_cena.ID = tab_kombinace.IDc
  WHERE
(tab_prikazci.ID = tab_kombinace.IDp   )
AND (tab_destinace.ID = tab_kombinace.IDn   )
AND (tab_destinace.ID = tab_kombinace.IDv   )
AND (tab_cena.ID = tab_kombinace.IDc   )

Proběhne syntakticky v pořádku, ale nevrátí žádné hodnoty. Tabulka podle které by měl vhledávat tzn. tab%kombinace není prázdná a i ostatní obsahují data.

Můžu poprosit o kopanec směrem kde hledat chybu? 

Děkuji

Nahlásit jako SPAM
IP: 92.250.143.–
Ferko
~ Anonymní uživatel
1 příspěvek
3. 7. 2013   #4
-
+1
-
Zajímavé

Zdravim,

tvoj problem je v tychto riadkoch:

AND (tab_destinace.ID = tab_kombinace.IDn   )
AND (tab_destinace.ID = tab_kombinace.IDv   )

Prelozene do ludseho jazyka, chces vypisat tie riadky tabulky, v ktorych je nakladka a vykladka v tom istom meste, co asi nie je to ci si povodne zamyslal.

Ak to chces opravit potrebujes joinovat tabulku tab_destinace 2x ale zakazdym cez ine id (tab_kombinace.IDn, tab_kombinace.IDv).

Co sa tyka tych podmienok pod WHERE tak su uplne zbytocne kedze sa nachadzaju uz v samotom JOINE.

Nahlásit jako SPAM
IP: 95.131.133.–
GRIZLY0
Duch
20. 8. 2013   #5
-
0
-

Děkuji za rady. Po dlouhé době jsem se k problému vrátil a na jejich základě našel řešení

USE ceniklgd;

SELECT tab_prikazci.divize, tab_prikazci.nazev, tab_cena.hodnota, tab_cena.mena, tab_destNakl.misto AS 'nakladka', tab_destVykl.misto AS 'vykladka'
   FROM tab_kombinace     
    LEFT JOIN tab_prikazci  ON (tab_prikazci.ID = tab_kombinace.IDp)
	LEFT JOIN tab_cena 	    ON (tab_cena.ID = tab_kombinace.IDc)
    LEFT JOIN tab_destinace AS tab_destNakl ON (tab_destNakl.ID = tab_kombinace.IDn)
	LEFT JOIN tab_destinace AS tab_destVykl ON (tab_destVykl.ID = tab_kombinace.IDv)
    
    
    
Nahlásit jako SPAM
IP: 77.48.111.–
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, 10 hostů

Podobná vlákna

MVC výpis dat z více tabulek — založil hajnis

Spojení tabulek — založil Paja2

Spojení dvou tabulek — založil Forest

Rychlost spojení tabulek — založil BigBear

 

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