Подтвердить что ты не робот

Выбирать из одной таблицы, подсчитывать из другой, где id связан

heres мой код:

$sql = mysql_query("select c.name, c.address, c.postcode, c.dob, c.mobile, c.email, 
                    count(select * from bookings where b.id_customer = c.id) as purchased, count(select * from bookings where b.the_date > $now) as remaining, 
                    from customers as c, bookings as b 
                    where b.id_customer = c.id
                    order by c.name asc");

вы можете видеть, что я пытаюсь сделать, но я не уверен, как правильно писать этот запрос.

появляется ошибка, которую я получаю:

Предупреждение: mysql_fetch_assoc(): поставляется аргумент не является допустимым результатом MySQL ресурс

heres my mysql_fetch_assoc:

<?php

while ($row = mysql_fetch_assoc($sql))
{
    ?>

    <tr>
    <td><?php echo $row['name']; ?></td>
    <td><?php echo $row['mobile']; ?></td>
    <td><?php echo $row['email']; ?></td>
    <td><?php echo $row['purchased']; ?></td>
    <td><?php echo $row['remaining']; ?></td>
    </tr>

    <?php   
}

?>
4b9b3361

Ответ 1

Попробуйте изменить понравившиеся...

count(select * from bookings where b.id_customer = c.id)

... до...

(select count(*) from bookings where b.id_customer = c.id)

Ответ 2

В вашем запросе неправильно используется COUNT, который был покрыт @В ответ....

Я также хотел бы предложить, возможно, лучшую построенную альтернативу, которая, я думаю, отражает ту же логику:

SELECT
  c.name,
  c.address,
  c.postcode,
  c.dob,
  c.mobile,
  c.email,
  COUNT(*) AS purchased,
  COUNT(b.the_date > $now OR NULL) AS remaining
FROM customers AS c
  INNER JOIN bookings AS b ON b.id_customer = c.id
GROUP BY c.id
ORDER BY c.name ASC

Примечание. Обычно вы должны включать все неагрегированные выражения SELECT в GROUP BY. Однако MySQL поддерживает сокращенные списки GROUP BY, поэтому достаточно указать ключевые выражения, которые однозначно идентифицируют все неагрегированные данные, которые вы вытягиваете. Пожалуйста, избегайте использования функции произвольно. Если столбец, не включенный в GROUP BY, имеет более одного значения для каждой группы, у вас нет элемента управления, значение которого действительно будет возвращено при вытягивании этого столбца без агрегации.. p >