У меня есть MySQL таблица «команда» имен сотрудников & их идентификаторы
ID | Employee_Name
------------------
1 John
2 Joe
3 Jack
4 Jill
Я сохраняю проекты, выделенные для этих сотрудников, в массиве в таблице «projects» как «Employee_IDS»
ID | Project_Name | Employee_IDS
--------------------------------
1 Abc Project 1,3,4
2 Dfg Project 2,4
—
Я хочу отобразить список сотрудников, которые были назначены для конкретного
проект а и те кто нет.
Переменная php, которая имеет массив, $ ppemployees.
<select name="pemployees[]" id="pemployees" multiple>
<?php
$myArray1 = explode(',', $ppemployees);
foreach($myArray1 as $my_Array1)
{
$sqlget5 = "SELECT * FROM team WHERE id=\"$my_Array1\";";
$resget5 = mysql_query($sqlget5);
if(mysql_num_rows($resget5) == 0)
{
?>
<option value="<?php echo $row5['id']; ?>"><?php echo $row5['FirstName']; ?></option>
<?php
}
else
{
while($row5 = mysql_fetch_array($resget5))
{
?>
<option value="<?php echo $row5['id']; ?>" selected><?php echo $row5['FirstName']; ?></option>
<?php
}
}
}
?>
В настоящее время я получаю только существующие значения, я хочу показать также несуществующие.
Попробуйте этот запрос, который использует FIND_IN_SET()
объединить две таблицы:
SELECT t2.Project_Name,
t1.Employee_Name,
CASE WHEN FIND_IN_SET(t1.ID, t2.Employee_IDS) > 0
THEN 'Assigned'
ELSE 'Unassigned' END AS status
FROM team t1
INNER JOIN projects t2
ORDER BY t2.Project_Name, t1.Employee_Name
Обратите внимание, что здесь мы на самом деле используем перекрестное соединение, которое в MySQL можно выразить с помощью INNER JOIN
без ON
состояние. Причина перекрестного объединения заключается в том, что мы хотим сопоставить каждого сотрудника с каждым проектом, независимо от каких-либо условий. Затем мы используем CASE
выражение, чтобы определить, будет ли сотрудник назначен для конкретного проекта.
Демо здесь:
Других решений пока нет …