Hallo, ik heb een probleempje. Ik werk met koppeltabellen. In de koppeltabel project_tasks zit de project_id die gekoppeld is aan task_id. Nou wil ik alle task_name
hebben waarvan de project_id 1 is.
Ik heb dit op deze manier proberen op te lossen:

<code>
$sql = 'SELECT `task_id` FROM `project_tasks` WHERE `project_id` = 1';
$result = mysql_query($sql)or die (mysql_error());
$product = mysql_fetch_assoc($result);
while($product = mysql_fetch_assoc($result))
{
$task = $product['task_id'] . '<br>';
echo $task;
}



$sql = 'SELECT `task_name` FROM `tasks` WHERE \'' . $task . '\' = `task_id`';
$result = mysql_query($sql)or die (mysql_error());
while($product2 = mysql_fetch_assoc($result))
{
echo $product2['task_name'];
}
</code>
In de eerste while krijg ik dus alle task_id's binnen waarvan de project_id 1 is. .
In de tweede while zeg ik dus dat ie de task_name's moet geven als de task_id van de while loop daarboven gelijk is aan de task_id uit de tabel tasks.
Maar helaas krijg ik er maar 1 task_name terug, terwijl er veel meer in me tabel zitten. Kan iemand mij misschien helpen?
Geen wonder, je hebt maar 1 variabele, $task, met daarin maar 1 id van 1 task. In je eerste while-lus overschijf je de waarde in deze variabele. $task zal dus het id van de laatst opgehaalde task bevatten.

De vraag is dan ook eigenlijk, waarom selecteer je de task_name niet direct?
<?php
$query = 'SELECT tast_id, task_name FROM tasks WHERE project_id = 1';
$result = mysql_query($query);

if(!$result) {
echo 'Fout tijdens ophalen van tasks: ' . mysql_error();
} else {
while($product = mysql_fetch_assoc($result)) {
echo 'Task #' . $product['task_id'] . ': ' . $product['task_name'] . '<br>';
}
}
?>
Nu selecteer je dus de task_id en task_name from tasks. In tasks zitten een hele hoop taken die gekoppeld zijn via de koppeltabel project_tasks. De koppeltabel koppelt de task_id's van de tabel tasks aan de project_id's van de tabel projects. Dus nu wil ik alle tasks ophalen die aan project_id 1 gekoppeld zijn.
Een voorbeeld van wat er in mijn koppeltabel project_tasks zit: 1:280. 1 is de project_id van projects en 280 is de id van task_id.
Je wil alle tasks die via de koppeltabel (een meer op meer relatie?***) aan 1 project gekoppeld zijn.

SELECT
   tasks.task_id,
   tasks.task_name
FROM
   project_tasks
LEFT JOIN
   tasks ON project_tasks.task_id = tasks.task_id
WHERE
  project_tasks.project_id = 1


** Is het mogelijk dat 1 task aan meerdere projecten is gekoppeld? Indien nee, dan lijkt het mij handiger om de koppeltabel te laten varen, en in het task-record direct het project_id mee te nemen. Zie ook normaliseren.
Ja! dat werkt as de brandweer. Hartelijk dank!

En nou nee, er kan maar 1 task aan 1 project gekoppeld zijn, maar ik gebruik ook koppeltabellen om competences en categories aan tasks te koppelen, en daar kunnen wel meerdere gekoppeld zijn.
Maar nogmaals, hartelijk dank!

Reageren