У меня есть две таблицы.«members» - это список всех участников, «stats» - это список сработавших дат.Общее поле это memberID.Мне нужен COUNT количества дней, в течение которого работал каждый человек, и я хочу, чтобы все были перечислены в выходной таблице, даже если у них еще не было рабочего дня.
Упрощенная структура базы данных:
**members** **stats**
memberID lname fname memberID date statsID
1 Mertz Fred 1 2017-12-31 1
2 Doe Jane 3 2017-12-31 2
3 Smith Frank 4 2017-12-31 3
4 Ricardo Lucy 2 2018-12-31 4
5 Starr Ringo 4 2018-12-31 5
2 2019-05-05 6
3 2019-05-05 7
Требуется вывод:
memberID lname fname Total Days
2 Doe Jane 2
1 Mertz Fred 1
4 Ricardo Lucy 2
3 Smith Frank 2
5 Starr Ringo 0 OR blank
Ринго еще не работал ни одного дня и НЕ появляется в таблице вывода.
Мой код:
$sql = "SELECT u.*,
COUNT(s.memberID)as tot_days
FROM members u
LEFT JOIN stats s
ON s.memberID = u.memberID
GROUP BY s.memberID
ORDER BY lname,fname";
$members = mysqli_query($dbc,$sql) or die(mysqli_error());
while ($row = mysqli_fetch_array($members)){
$row = array_map('htmlspecialchars', $row);
echo <<< HTML etc.
Это делает все, что я хочу, кроме тех, кто еще не работал ни дня.JOIN, LEFT JOIN, LEFT OUTER JOIN, RIGHT JOIN, RIGHT OUTER JOIN дают одинаковый результат.Я пробовал ВЛЕВО и ВПРАВО ВНУТРЕННЕЕ СОЕДИНЕНИЕ, если они вообще существуют, что приводило к ошибке Warning: mysqli_error() expects exactly 1 parameter, 0 given
.
Кто-то предложил использовать COALESCE (COUNT(s.memberID),0) as tot_days
, но это выдает ту же ошибку, что и выше.
Я занимался этим уже несколько дней, и меня это немного раздражает!