У меня есть большая база данных, в которой хранится много информации о клиентах, счетах и т. Д. Я хочу, используя идентификаторы клиентов, найти все их счета, SUM () цену, содержащуюся в каждом из них, и сохранить их, чтобы распечатать один уникальный счет.
Итак, я перебрал размышляя об этом:
try {
$conn = new PDO('mysql:host=myhost;dbname=accounting','user','pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $e){
echo "ERROR: " . $e->getMessage();
}
$stmt = $conn->prepare('SELECT GROUP_CONCAT(DISTINCT source_external_subscriber_id) AS ids
FROM cdr');
$stmt->execute();
foreach ($stmt as $row) {
$string = $row['ids'];
}
$array = explode(',', $string);
array_pop($array);
array_shift($array);
$destinationId = 0;
foreach ($array as $id) {
$stmt2 = $conn->prepare('SELECT id, call_type, source_customer_cost
FROM cdr
WHERE source_external_subscriber_id = :id
AND destination_account_id = :destinationId');
$stmt2->execute(array('id' => $id, 'destinationId' => $destinationId));
foreach ($stmt2 as $row2) {
$datos[] = $row2;
}
}
Результат меня не убедил, поэтому я решил проверить себя, выполняя сначала мой код, а затем ища клиента, чтобы сравнить количество счетов с длиной массива. (отсюда и отсутсвие отсутствия SUM ()) Затем, когда я искал более убедительный способ, я наткнулся на этот действительно полезный пост . Поэтому я изменил свой код на это. Но здесь они только объясняют, как написать запрос, а не как сохранить его в массиве.
try {
$conn = new PDO('mysql:host=host;dbname=accounting','user','pass');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
var_dump($conn);
}catch(PDOException $e){
echo "ERROR: " . $e->getMessage();
}
$destinationId = 0;
$stmt2 = $conn->prepare('SELECT source_external_subscriber_id, source_customer_cost FROM cdr WHERE destination_account_id = :destinationId GROUP BY source_external_subscriber_id');
$stmt2->execute(array('destinationId' => $destinationId));
foreach ($stmt as $row) {
$datos[] = $row2;
}
Теперь мне было интересно, как правильно хранить данные, чтобы они выглядели примерно так:
array = [
0 => array(
"id" => source_external_subscriber_id1,
"total" => SUM(source_customer_cost)
),
1 => array(
"id" => source_external_subscriber_id2,
"total" => SUM(source_customer_cost)
)...
];
Спасибо всем за помощь, надеюсь, у вас отличный день !