PHP получает идентификатор из цикла explode / foreach и вычисляет цену - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь сложить все product_price в таблице MySQL для кратного product_id.

Когда я запускаю $result = "SELECT SUM(product_price) AS product_price FROM products";, он суммирует все product_price, которые работают правильно.

Когда я запускаю $result = "SELECT SUM(product_price) AS product_price FROM products WHERE product_id = $school_product_id";, это выдает ошибку массива.

Я хочу, чтобы запрос получил все 4 идентификатора из explode / foreach и отобразил общую стоимость.

Взрываемое поле базы данных выглядит как «1,2,3,4», что соответствует product_id в таблице products ниже.

    $row = $result->fetch_assoc();
    $school_subject_products = $row["school_subject_products"];  // (output is 1,2,3,4)
    $school_product_id = explode(',', $school_subject_products); // (explode 1,2,3,4 to use in query below to calculate all 4 product_id's product_price)


    $result = "SELECT SUM(product_price) AS product_price FROM products WHERE product_id = ??????????"; //<------ how do I get it to search for all 4 product_ids and total the price of all the product_ids
    $price_result = $mysqli->query($result);
    $row = $price_result->fetch_assoc();
    $sum = $row['product_price'];
    echo $sum;

    ?>

1 Ответ

1 голос
/ 17 мая 2019

Идеальным решением является нормализация ваших данных, чтобы у вас не было списка через запятую.

Если вы не можете этого сделать, вы можете использовать JOIN с FIND_IN_SET() для сопоставления сразделенный запятыми список, вместо выполнения нескольких запросов и использования explode().

SELECT SUM(product_price) AS product_price
FROM products AS p
JOIN select_subject AS s ON FIND_IN_SET(p.product_id, s.school_subject_products)
WHERE school_id = $selected_school_id AND school_year_id = $selected_year_id AND  school_subject_id = $school_subject_selected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...