hulp query opbouwen
Id --- value 1 --- value 2 ---- value 3
1 --- Test --- 1234 ---- 5678
2 --- Test2 --- 5678 ---- 6786
Nu wil ik value 1 selecteren waar in kolom value 3 = aan kolom value 2.
Dus voor dit voorbeeld heb ik "Test2" nodig als resultaat.
Kan iemand helpen? Want bij mij lukt dit niet. Heb al veel zaken geprobeerd.
Maak nette kolom namen zo raak je je hele overzicht kwijt.
Waar het op neer komt is dat je een selfjoin nodig hebt:
In je WHERE kun je ook colommen met elkaar vergelijken.
als ik dit doe dan krijg ik niets uit men tabel.
mijn code is nu:
$stmt = $this->pdo->prepare("SELECT value1 FROM Mytable au1 WHERE au1.value2 IN (SELECT au2.value3 FROM Mytable au2)");
maar hier doet hij ook het omgekeerde mee. dus value3 moet gelijk zijn aan value2 maar hij mag niet kijken naar value2 = value3 anders neemt hij dit ook. En dat mag nu net niet.
Mijn query ook getest?
wat bedoel je met select a.value1, b. value 2? ik heb enkel value1 nodig?
mijn code:
$stmt = $this->pdo->prepare("SELECT value1 FROM Mytable au1 WHERE au1.value2 IN (SELECT au2.value3 FROM Mytable au2)");
deze doet het dus maar in beide richtingen.
Dat je hem mee selecteert, is om te kunnen joinen op je tabel.
never mind.
Je query doet het wel.
Had alleen gekeken naar de info die jij ons gaf in je start topic.
Gewijzigd op 30/01/2013 09:43:10 door Bart V B
Wat probeer je precies te krijgen en wat heb je?
ik heb de code die je hierboven kan vinden. die code doet het maar hij doet dingen te veel.
ik probeer het opnieuw duidelijk te schetsen:
Id --- value 1 --- value 2 ---- value 3
1 --- Test --- 6786 ---- 5678
2 --- Test2 --- 5678 ---- 6786
als ik mijn code loslaat op de deze tabel krijg ik: test en test2. terwijl ik alleen test2 wil omdat value3 van test gelijk is aan value2 van test2.
praktisch voorbeeld: ik (test) stuur een push naar test2. de code wordt uitgevoerd en en hij vindt met mijn code test en test2 terwijl ik naar test2 moet zenden. Maar test2 kan ook naar test zenden in deze tabel maar met mijn code doet hij dit alle 2 meteen. terwijl als je van test naar test2 wil zenden mag test niet in het resultaat voorkomen.
hopelijk is het wat duidelijk
Toevoeging op 30/01/2013 10:13:32:
het komt erop neer dat zender test naar test2 zend maar zen eigen ook mee neemt terwijl hij moet kijken vanaf het standpunt van de zender. dus test 2 moet ontvangen maar mijn eigen (test) mag het niet ontvangen.
Maar wat krijg je dan bij de query die ik gaf?
@Ivo ik heb enkel value1 nodig.
dus nog eens een concreet voorbeeld. Neem nu tjvb, ivo, en ik.
Id --- naam --- gsm ---- gsm vriend
1 --- ik --- 6786 ---- 5678
2 --- tjvb --- 5678 ---- 111
3 --- ivo --- 111 ---- 5678
ik stuur een push naar tjvb omdat gsm vriend van mij = gsm van tjvb. dat werkt. maar hij stuurt ook naar ivo omdat ivo en tjvb volgens mijn query ook gelijk zijn (wat klopt volgens mijn query) maar dat mag nu net niet zijn. hij moet enkel kijken vanaf het standpunt van de zender en niet verder.
Code (php)
1
2
3
4
2
3
4
SELECT t1.naam sender, t2.naam receiver
FROM Mytable t1
INNER JOIN Mytable t2 ON t1.gsm_vriend = t2.gsm
WHERE t1.gsm = 6786
FROM Mytable t1
INNER JOIN Mytable t2 ON t1.gsm_vriend = t2.gsm
WHERE t1.gsm = 6786
Het is gewoon een kwestie van een filter inbouwen.
ik heb alleen de naam van de receiver nodig.
concreet selecteer de naam van de receiver waar gsm vriend van de sender = gsm van de ontvanger en dan stop.
maar als een andere ook naar dezelfde receiver zend mag hij deze ook niet nemen. wat hij nu wel doet met men code.
wat neer komt als ik zend naar tjvb dan krijgt ivo ook een push omdat gsm vriend ook gelijk is aan gsm van tjvb. maar ivo mag dus geen ontvangen.
ik, tjvb
Haal je de filter (WHERE) weg, dan krijg je:
ik, tjvb
tjvb, ivo
de uitkomst die ik nodig heb is enkel tjvb. en niet de naam van de zender. enkel van de ontvanger
Gewijzigd op 30/01/2013 13:53:52 door - SanThe -
SELECT t1.naam sender, t2.naam receiver
FROM Mytable t1
INNER JOIN Mytable t2 ON t1.gsm_vriend = t2.gsm
WHERE t1.gsm = 6786
dat laatste where t1.gsm = 6786 zou je moeten kunnen zeggen van waar de zender (in dit geval ik) = ik ofzoiets dat je niet die nummer nodig hebt anders werkt dit enkel met deze nummer...
WHERE t1.naam = 'ik'
Dan kan je 'ik' in een variabele zetten als dat nodig is.
ben nog maar beginnende phper...