2016-12-15 5 views
2

Вот таблица базы данных:PHP/MYSQL подсчета заказов

Users

Order_items

$sql[2] = "SELECT u.* , oi.* , COUNT(oi.user_id) AS count 
      FROM users u, order_items oi 
      WHERE u.id=oi.user_id "; 
$result3= mysqli_query($conn,$sql[2]) or die(mysqli_error()); 
if (mysqli_num_rows($result3) > 0) { 
    while ($record = mysqli_fetch_array($result3)) { 
     echo $record['count']; 
    } 
} 

Я хочу, чтобы подсчитать, сколько порядок у каждого пользователя. Пример: Как у Томаса есть 3 порядка, но мой код пишет 4, я хочу написать Томаса (3), Грачана (1). Любая идея, как это исправить?

+0

См http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -for-what-seem-to-me-to-be-a-very-simple-sql-query – Strawberry

+0

Пожалуйста, используйте форматированный текст вместо изображений. Кроме того, с данными выборки, каков ожидаемый результат? – jarlh

+0

результат: 4 (это все, я думаю, его подсчет строк) –

ответ

0

Используйте этот запрос:

SELECT u.id, 
     COUNT(oi.user_id) AS orderCount 
FROM users u 
LEFT JOIN order_items oi 
    ON u.id = oi.user_id 
GROUP BY u.id 

Причина мы считаем user_id из order_items таблицы из-за края случае, когда данный пользователь не имеет заказов. В этом случае мы хотим убедиться, что его счет будет равен нулю. Функция COUNT игнорирует NULL s, что мы и хотим.

+0

Клубника: Причина для нисходящего? –

+0

Потому что вы считаете, что не так. – Strawberry

+0

@TimBiegeleisen что-то не так с этим выбором, потому что результат: 3111 –

0

Существует еще один способ для выполнения запроса SQL с помощью подзапросов:

SELECT id, email, address, name, (SELECT count(user_id) FROM order_items WHERE user_id = users.id) AS orderCount FROM users;

+0

и что произойдет, если я хочу добавить еще одну строку из другой таблицы (продуктов). хотите ID из таблицы продуктов, затем p.ID = oi.product_id (order_items) –

+0

@FaragoRoland Какова собственность продуктов, которые вы хотите? Это тоже счет? – SaidbakR

+0

Нет. У меня есть другая таблица (Продукты: ID, имя_продукта, цена), и я хочу получить количество (от order_items) * цена (из таблицы продуктов). Пример: 5 * 20 = 100 (например, 5 заказанных товаров * цена (20/каждый)) –