Gegevens ophalen database met meerdere input
Ik heb een klein vraagje;
Met een query haal ik ID's op, wat bijna altijd varieert.
Nu zijn deze ID's gekoppeld met ID's uit een andere tabel, en die wil ik met een andere query ophalen.
Nu pakt hij er dan maar 1. Hoe los ik dit op?
Als ik jou was zou ik eens naar MySQL JOIN zoeken.
Ik heb dus een query, die als output meerdere waardes geeft.
Ik heb een keuzemenu van klanten, waarna hij aan de hand van het ID van de klant, de bijbehorende modules zoekt. Deze hebben ook een ID. daarna, aan de hand van deze ID's haalt hij uit een tabel de namen van de modules op en zet die in een array.
Nu loop ik vast bij de meerdere ID's van de modules, om die daarna te vergelijken met de namen van de modules. Hij pakt er maar 1, en geeft als output dus 1 naam van een module.
Toevoeging op 11/11/2011 13:33:57:
Overigens, de meerdere waardes staan in 1 variabele $id_module, en als ik die echo dan geeft hij dus wel netjes de ID's weer van de modules.
<php>
$query_name_module="SELECT * FROM list_modules WHERE id = ".$row['id_module'];
if ($result_name = mysql_query($query_name_module)) {
while ($row = mysql_fetch_array($result_name)){
$module_name = $row['nl'];
echo $module_name ."<br>";
}
}
</php>
Marijke Hakvoort op 11/11/2011 13:31:15:
Overigens, de meerdere waardes staan in 1 variabele $id_module, en als ik die echo dan geeft hij dus wel netjes de ID's weer van de modules.
Geef eens een voorbeeldje, want dit ontgaat mij even.
if ($result=mysql_query($query_id_module)) {
while ($row=mysql_fetch_array($result)) {
$id_module = $row['id_module'];
echo $id_module ."<br>";
}
}
Waar $adminid het ID is van de klant.
De modules hebben allemaal een ID, en de output kan dus bijv. zijn: 1,2,6 of 2,5 of alleen 1. Dat varieert.
Hm, die $id_module bestaat dus uit meerdere ID's van modules? Zo ja maak je van die variabele een array, en gebruik MySQL IN() . Zo niet, dan graag een beter voorbeeld..
Waar moet ik dat dan gebruiken?
Toevoeging op 11/11/2011 14:02:25:
Is dat zoals in dit voorbeeld?
SELECT userID FROM usergroup WHERE groupid IN $usergroupid
Dat werkte niet namelijk ..
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in
Google is je vriend ;-)
Google is je vriend ;-)
Dit is ongeveer wat ik heb, zo krijgen jullie een shcets
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query_id_module="SELECT id_module FROM lnk_administrations_modules WHERE id_administration = ".$adminid;
if ($result=mysql_query($query_id_module)) {
$id_module_array = array();
while ($row=mysql_fetch_assoc($result)) {
$id_module_array[] = $row;
}
//print_r($id_module_array);
}
?>
$query_id_module="SELECT id_module FROM lnk_administrations_modules WHERE id_administration = ".$adminid;
if ($result=mysql_query($query_id_module)) {
$id_module_array = array();
while ($row=mysql_fetch_assoc($result)) {
$id_module_array[] = $row;
}
//print_r($id_module_array);
}
?>
Dit is dus om de ID's van de modules op te halen, die in een array worden gezet.
Nu de namen van de modules selecteren:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query_name_module="SELECT * FROM list_modules WHERE id IN ".$id_module_array;
if ($result_name = mysql_query($query_name_module) or die (mysql_error())) {
while ($row = mysql_fetch_array($result_name)){
$module_name = $row['nl'];
echo $module_name ."<br>";
}
}
?>
$query_name_module="SELECT * FROM list_modules WHERE id IN ".$id_module_array;
if ($result_name = mysql_query($query_name_module) or die (mysql_error())) {
while ($row = mysql_fetch_array($result_name)){
$module_name = $row['nl'];
echo $module_name ."<br>";
}
}
?>
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array' at line 1
Code (php)
1
2
3
2
3
<?php
$query_name_module="SELECT * FROM list_modules WHERE id IN (".implode(",",$id_module_array).")";
?>
$query_name_module="SELECT * FROM list_modules WHERE id IN (".implode(",",$id_module_array).")";
?>
Toevoeging op 11/11/2011 14:30:25:
@ Santhe
Ik ging er niet direct vanuit dat het komma gescheiden was, vandaar het maken van een array en daarna imploden. Het kan natuurlijk ook gewoon direct.
als ik mijn query vervang met de jouwe krijg ik deze fout;
Unknown column 'Array' in 'where clause'
Toevoeging op 11/11/2011 14:49:11:
Ik heb het eens even anders aangepakt,
want ik zat weer veel te moeilijk te denken .. *Ik hou van vrijdag!*
Nu gewoon met een simpele JOIN.
Maar.. alsnog, weer iets waar ik op vast loop.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$result = mysql_query("SELECT
list_modules.nl
FROM
lnk_administrations_modules
Inner Join list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = ".$adminid) or die(mysql_error());
$row = mysql_fetch_array( $result );
foreach ($row as $key => $value){
echo "key = ".$key."<br>value = ".$value ."<br>";
}
?>
$result = mysql_query("SELECT
list_modules.nl
FROM
lnk_administrations_modules
Inner Join list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = ".$adminid) or die(mysql_error());
$row = mysql_fetch_array( $result );
foreach ($row as $key => $value){
echo "key = ".$key."<br>value = ".$value ."<br>";
}
?>
Maar, als ik in Navicat deze query laat lopen geeft hij netjes 3 waardes terug.
echter op het scherm maar 1.
Toevoeging op 11/11/2011 14:53:00:
Dit is de output:
key = 0
value = Relatiemanagement
key = nl
value = Relatiemanagement
Waarschijnlijk maak ik gewoon een stomme fout, maar ik kom er nu niet uit ..
Toevoeging op 11/11/2011 15:17:46:
Het is inmiddels gelukt!
Toch bedankt iedereen voor het meedenken :)