hulp query opbouwen
Ik heb een tabel zoals onderstaand voorbeeld:
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.
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.
1 keer plaatsen is genoeg: http://www.phphulp.nl/php/forum/topic/hulp-query-opbouwen/88942/last/
Kone, dit is zo onduidelijk als wat.
Maak nette kolom namen zo raak je je hele overzicht kwijt.
Waar het op neer komt is dat je een selfjoin nodig hebt:
Maak nette kolom namen zo raak je je hele overzicht kwijt.
Waar het op neer komt is dat je een selfjoin nodig hebt:
1 topic is genoeg.
In je WHERE kun je ook colommen met elkaar vergelijken.
In je WHERE kun je ook colommen met elkaar vergelijken.
@tjvb
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.
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?
@bart
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.
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
@Konne, je vraagt om een query en laat een andere zien. (Ik zie tenminste niets terug komen van die where, wel een in en subquery)
Wat probeer je precies te krijgen en wat heb je?
Wat probeer je precies te krijgen en wat heb je?
@tjvb, bart vb
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.
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?
Konne, bedoel je zoiets?
@tjvb als ik u query uitvoer krijg ik geen resultaat. (null)
@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.
@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.
@ger
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 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.
Maar dat is wat er gebeurt in bovenstaande query. De uitkomst daarvan zou zijn:
ik, tjvb
Haal je de filter (WHERE) weg, dan krijg je:
ik, tjvb
tjvb, ivo
ik, tjvb
Haal je de filter (WHERE) weg, dan krijg je:
ik, tjvb
tjvb, ivo
@ger
de uitkomst die ik nodig heb is enkel tjvb. en niet de naam van de zender. enkel van de ontvanger
de uitkomst die ik nodig heb is enkel tjvb. en niet de naam van de zender. enkel van de ontvanger
Ja en, dan haal je dat er uit.
Gewijzigd op 30/01/2013 13:53:52 door - SanThe -
ok maar die code van Ger:
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...
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.gsm = 6786
WHERE t1.naam = 'ik'
Dan kan je 'ik' in een variabele zetten als dat nodig is.
WHERE t1.naam = 'ik'
Dan kan je 'ik' in een variabele zetten als dat nodig is.
en hoe zet je ik in een variabele?
ben nog maar beginnende phper...
ben nog maar beginnende phper...




