我正在為一個專案使用 CodeIgniter 3,并在控制器中撰寫了以下函式以將一些資料傳遞給視圖。它查詢資料庫中的表以獲取血型作為標簽并獲取每種血型的行數,其中“isAvailable = 1”。然后將這些資料傳遞到視圖中以呈現圖表。但正如你所看到的,這些計數是錯誤的。即使“isAvailable = 0”,它也會計算行數。我的代碼有什么問題,我該如何解決?
控制器中的函式。
public function bloodTypesChart()
{
$chartData = [];
$blood_types = $this->db->query("SELECT (BloodType) as blood_type FROM packets WHERE (isAvailable) = '1' GROUP BY blood_type")->result_array();
foreach($blood_types as $bt)
{
$record = $this->db->query("SELECT COUNT(PacketID) as count FROM packets WHERE BloodType = '{$bt['blood_type']}'")->result_array();
foreach($record as $row) {
$chartData['label'][] = $bt['blood_type'];
$chartData['data'][] = $row['count'];
}
}
$chartData['chart_data'] = json_encode($chartData);
$this->load->view('insight',$chartData);
}
看法
<script>
new Chart(document.getElementById("bar-chart"), {
type: 'bar',
data: {
labels: <?= json_encode($label)?>,
datasets: [
{
label: "Donations",
backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"],
data: <?= json_encode($data)?>
}
]
},
options: {
legend: { display: false },
title: {
display: true,
text: 'Donations'
}
}
});
</script>


uj5u.com熱心網友回復:
您的這種方式太復雜了,請避免使用 php 回圈來獲取您可以通過簡單查詢獲取的資料。
只需使用此 mysql 查詢,計算 isAvailable 行,當為 true (1) 時:
$sql=" SELECT BloodType as blood_type, COUNT(PacketID) as mycount
FROM packets
WHERE isAvailable = 1
GROUP BY blood_type
";
注意:我已將別名計數更改為 mycount,因為計數是保留字。
你的函式看起來是這樣的:
public function bloodTypesChart()
{
$sql=" SELECT BloodType as blood_type, COUNT(PacketID) as mycount
FROM packets
WHERE isAvailable = 1
GROUP BY blood_type
";
$chartData = [];
$blood_types = $this->db->query($sql)->result_array();
foreach($blood_types as $row)
{
$chartData['label'][] = $row['blood_type'];
$chartData['data'][] = $row['mycount'];
}
$chartData['chart_data'] = json_encode($chartData);
$this->load->view('insight',$chartData);
}
這是使用簡化版本的資料庫執行查詢的sql-fiddle
uj5u.com熱心網友回復:
在您的查詢中,因為您只將欄位名稱封裝在括號中,所以WHERE (isAvailable) = '1'計算結果為WHERE there is a field labeled isAvailable- 對于表中的每一行都是如此。洗掉括號,它應該可以正常作業
$blood_types = $this->db->query("SELECT (BloodType) as blood_type FROM packets WHERE isAvailable = '1' GROUP BY blood_type")->result_array();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/388653.html
標籤:php mysql 代码点火器 codeigniter-3
上一篇:MySQL定制的存在查詢性能
