» »

MySQL poizvedba iz dveh tabel

MySQL poizvedba iz dveh tabel

tadejp81 ::

Pozdravljeni,

zanima me, ce je mogoce podati enkratno poizvedbo da mySQL poveže ti dve tabeli glede na parameter TeorijaInPraksa.
Torej, v primeru, da je Tecajniki.teorijaInPraksa==1 potem vrne vrstice iz obeh tabel, kjer je Tecajniki.IdTeorijeInPtakse == Tecaji.IdTecaja.
Ce pa je TeorijaInPraks == 0, potem vrne iz obeh tabel vrstice, kjer je Tecajniki.IdTeorije == Tecaji.IdTecaja.

Najlepša hvala za odgovor in lep dan,
Tadej

Tecajniki
+--------------+---------------+-------------------+------------+--------------------+------------------+
|IdTecajnika   |ImeTecajnika   |PriimekTecajnika   |IdTeorije   |IdTeorijaInPrakse   |TeorijaInPraksa   |
+--------------+---------------+-------------------+------------+--------------------+------------------+
|122           |Janez          |Novak              |A           |AB                  |1                 |
+--------------+---------------+-------------------+------------+--------------------+------------------+

Tecaji					
+------------+-----------------------------+---------+
|IdTecaja    |OpisTecaja                   |SteviloUr|
+------------+-----------------------------+---------+			
|A           |Teroreticeni del             |30       |
|AB          |Teoreticnio del s prakso     |50       |
+------------+-----------------------------+---------+

Red_Mamba ::

http://www.w3schools.com/sql/sql_join_l...

drugic treba bolj v soli poslusat
[st.slika https://img.shields.io/badge/Slo-Tech-green.svg test]
Linkedin >> http://goo.gl/839Aua
Mamba's Crypto & ICO's: https://t.me/joinchat/AAAAAExTkO4P4UDy0fIZdg

tadejp81 ::

Hvala za odgovor, ampak ne vem če sem dovolj razumljivo opisal težavo.

Za boljšo predtsvo dodajam povezavo na sliko.
Povezava do slike

Rad bi dve poizvedbi ločil med sabo glede na vrednost TeorijaInPraksa v tabeli Tečajniki.

V primeru, da je TeorijaInPraksa == 0 se izvede ukaz:
SELECT Tecajniki .* , Teorija.*
FROM Tecajniki, Teorija
WHERE Tecajniki.IdTeorije = Teorija.IdTeorije

V primeru, da je TeorijaInPraksa == 1, pa se izvede:
SELECT Tecajniki .* , Praksa.*
FROM Tecajniki, Praksa
WHERE Tecajniki.IdPrakseInTeorije = Praksa.IdPrakseInTeorije

Torej izbor iz dveh različnih tabel glede na vrednost TeorijaInPraksa v prvi tabeli.

Rad bi pa poslal en ukaz, če je seveda to sploh mogoče. V podatkovnih bazah nisem tako globoko in pa tudi v šoli jih nisem veliko obravnaval, ker nisem iz te stroke.

Hvala in lep dan.

Tody ::

CASE WHEN uporabi. Vrjetno boš moral uporabiti gnezden stavek


Select case when neko polje = neka vrednost then poveš kaj bi rad
when neko polje = neka vrednost2 then poveš kaj bi rad2
end case
from tvoja tabela (lahko uporabiš tudi dual)

Zgodovina sprememb…

  • spremenil: Tody ()

smacker ::

CASE WHEN seveda lahko uporabiš, če izbiraš 1 Tečajnika. Če izbiraš več tečajnikov hkrati, potem moraš za vsakega tečajnika izbrat iste podatke.
Primer ki ga omenjaš je precej nenavaden. Navadno s poizvedbo želimo dobiti pričakovane rezultate, tukaj pa bo oblika vrnjenih podatkov odvisna od podatkov v tabeli. Razloži raje v širšem smislu kaj želiš, in ti povemo kako se to pravilneje naredi.
Ena varjanta bi bla, da izbereš tečajnika, teorijo in prakso, pri čemer so polja iz prakse pač NULL, če tečajnik prakse še nima. Query bi zgledal nekako tako:

SELECT Tecajniki.*, Praksa.*, Teorija.*
FROM Tecajniki
     LEFT JOIN Teorija ON (Tecajniki.IdTeorije = Teorija.IdTeorije)
     LEFT JOIN Praksa ON (Tecajniki.TeorijaInPraksa == 1 AND Tecajniki.IdPrakseInTeorije = Praksa.IdPrakseInTeorije)

PS: Pri takšnem selectu boš mel problem, če maš v dveh tabelah enako ime stolpca, zato raje kot Praksa.* napiši Praksa.stolpec1, Praksa.stolpec2,...
EDIT: query izbere vse tečajnike, če želiš izbrati le določene, dodaš na koncu WHERE pogoj1 AND/OR pogoj2 ...

Zgodovina sprememb…

  • spremenil: smacker ()

rokp ::

Ce je struktura tabel Praksa in Teorija enaka (ceprav glede na napisane pogoje pri poizvedi za Teorijo nisem preprican, da je), bi bila morda taksna resitev ustrezna:

SELECT Tecajniki.* , Teorija.* FROM Tecajniki, Teorija WHERE Tecajniki.IdTeorije = Teorija.IdTeorije AND Tecajniki.TeorijaInPraksa = 0
UNION
SELECT Tecajniki.* , Praksa.* FROM Tecajniki, Praksa WHERE Tecajniki.IdPrakseInTeorije = Praksa.IdPrakseInTeorije AND Tecajniki.TeorijaInPraksa = 1


Vsekakor bi bilo najlazje, ce podas relevantne podatke (tabela Tecaji, ki jo navajas v prvem postu, kolikor vidim, za ta primer sploh ni pomembna, manjkata pa tabeli Teorija in Praksa - verjetno naj bi bilo to vidno na linku, ampak meni ga ne odpre)...

Red_Mamba ::

v praksi bi jaz to naredil z enim SQL stavkom. Potem pa v kodi iz pravega polja preberes

razen ce rabis SQL sestavit zaradi take naloge :))
[st.slika https://img.shields.io/badge/Slo-Tech-green.svg test]
Linkedin >> http://goo.gl/839Aua
Mamba's Crypto & ICO's: https://t.me/joinchat/AAAAAExTkO4P4UDy0fIZdg

tadejp81 ::

Hvala vsem za nasvete, z vašo pomočjo mi je nekako uspelo sesstaviti poizvedbo.

Tody ::

V enem mesecu pa upam da res :)

tadejp81 ::

Če imaš več projektov na kupu je tako, kaj hočeš:)

MrStein ::

select * from Tecajniki (left) join Tecaji on
    Tecajniki.teorijaInPraksa=1 and Tecajniki.IdTeorijeInPtakse = Tecaji.IdTecaja
  or
    Tecajniki.teorijaInPraksa=0 and Tecajniki.IdTeorije = Tecaji.IdTecaja;

"left" je opcijski (brez oklepajev), z njim dobiš tudi vrstice iz Tecajniki, kjer se nobena vrstica iz Tecaji ne ujema.

(slika ni več dostopna, tako da če je tam kaj drugega pisalo...)

(to je odgovor na prvo vprašanje, kjer so omenjeni samo dve tabeli)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Sistemski administrator MCSA

Oddelek: Loža
92583 (2142) _QS8_
»

android app development

Oddelek: Programiranje
51280 (945) Mavrik
»

CISCO Catalyst 2950

Oddelek: Omrežja in internet
301456 (1058) x.sci
»

Kako do izpita za voditelja čolna?

Oddelek: Loža
177755 (7451) projektor
»

Potapljaski tecaj?

Oddelek: Loža
323175 (2834) ali3n

Več podobnih tem