MySQL SELECT 和顺序作为关联数组
MySQL SELECT and order as associative array
首先感谢您的观看,我有一个 mysql 问题,老实说我不知道如何解决。如果有人能帮助我,我将不胜感激。
我的 mysql 数据库中有以下两个表(请参阅下面的 link)
http://www.rodneywormsbecher.com/sql-tables.jpg
我想要实现的输出如下:
array (
[0] => category_name
[total_userhours] => count(id) userhours
[1] => category_name
[total_userhours] => count(id) userhours
[2] => category_name
[total_userhours] => count(id) userhours
)
所以数组中的第一个结果有类别名称,在它下面,它生成一个变量来计算所有具有 userhour_category_id.
的用户小时数
提前致谢,
罗德尼
/ edit 我从回复中得到了 2 个可行的解决方案:
$data = array();
foreach ($Database->customQuery("SELECT * FROM userhour") as $r) {
$cat_id = $r['userhour_category_id'];
$cat_result_set = $Database->fetchSingleArray($Database->customQuery("SELECT * FROM userhour_category WHERE id={$cat_id}"));
$cat_name = $cat_result_set['category_name'];
$count = $Database->fetchSingleArray($Database->customQuery("SELECT COUNT(id) AS total FROM userhour WHERE userhour_category_id={$cat_id}"));
$data[$cat_name] = $count['total'];
}
print_r($data);
$Sql1 = "SELECT c.category_name, count(*) AS total_userhours
FROM `userhour` u
JOIN `userhour_category` c
ON (u.userhour_category_id = c.id)
GROUP BY u.userhour_category_id";
$test = $Database->fetchAllArray($Database->customQuery($Sql1));
print_r($test);
两者都像魅力一样工作,但我更喜欢 sql 的方式。
输出:
Array
(
[Graphic design] => 15
[Web design] => 9
[Newsletter] => 1
)
Array
(
[0] => Array
(
[category_name] => Web design
[total_userhours] => 9
)
[1] => Array
(
[category_name] => Graphic design
[total_userhours] => 15
)
[2] => Array
(
[category_name] => Newsletter
[total_userhours] => 1
)
)
谢谢大家
你可以这样做:
$db = mysqli_connect("host","user","pass","name");
$data = array();
foreach($db->query("select * from userhour") as $r):
$cat = $r['project_name'];
$data[$cat] = array(
'id' => $r['id'],
'mins' => $r['minutes_spend']
);
endforeach;
$db->close();
并将列更改为您需要的内容,但您应该会得到与您期望的类似的输出。
(我看不到您的 table 名称 and/or 对 userhour 事物的引用,因此请根据需要对其进行编辑。
您可以按类别将您 userhour
分组,然后对每个组进行计数:
SELECT c.category_name, count(*) AS total_userhours
FROM `userhour` u
JOIN `userhour_category` c
ON (u.userhour_category_id = c.id)
GROUP BY u.userhour_category_id
我没有测试查询,但它应该可以。
首先感谢您的观看,我有一个 mysql 问题,老实说我不知道如何解决。如果有人能帮助我,我将不胜感激。
我的 mysql 数据库中有以下两个表(请参阅下面的 link) http://www.rodneywormsbecher.com/sql-tables.jpg
我想要实现的输出如下:
array ( [0] => category_name [total_userhours] => count(id) userhours [1] => category_name [total_userhours] => count(id) userhours [2] => category_name [total_userhours] => count(id) userhours )
所以数组中的第一个结果有类别名称,在它下面,它生成一个变量来计算所有具有 userhour_category_id.
的用户小时数提前致谢, 罗德尼
/ edit 我从回复中得到了 2 个可行的解决方案:
$data = array();
foreach ($Database->customQuery("SELECT * FROM userhour") as $r) {
$cat_id = $r['userhour_category_id'];
$cat_result_set = $Database->fetchSingleArray($Database->customQuery("SELECT * FROM userhour_category WHERE id={$cat_id}"));
$cat_name = $cat_result_set['category_name'];
$count = $Database->fetchSingleArray($Database->customQuery("SELECT COUNT(id) AS total FROM userhour WHERE userhour_category_id={$cat_id}"));
$data[$cat_name] = $count['total'];
}
print_r($data);
$Sql1 = "SELECT c.category_name, count(*) AS total_userhours
FROM `userhour` u
JOIN `userhour_category` c
ON (u.userhour_category_id = c.id)
GROUP BY u.userhour_category_id";
$test = $Database->fetchAllArray($Database->customQuery($Sql1));
print_r($test);
两者都像魅力一样工作,但我更喜欢 sql 的方式。
输出:
Array ( [Graphic design] => 15 [Web design] => 9 [Newsletter] => 1 ) Array ( [0] => Array ( [category_name] => Web design [total_userhours] => 9 ) [1] => Array ( [category_name] => Graphic design [total_userhours] => 15 ) [2] => Array ( [category_name] => Newsletter [total_userhours] => 1 ) )
谢谢大家
你可以这样做:
$db = mysqli_connect("host","user","pass","name");
$data = array();
foreach($db->query("select * from userhour") as $r):
$cat = $r['project_name'];
$data[$cat] = array(
'id' => $r['id'],
'mins' => $r['minutes_spend']
);
endforeach;
$db->close();
并将列更改为您需要的内容,但您应该会得到与您期望的类似的输出。
(我看不到您的 table 名称 and/or 对 userhour 事物的引用,因此请根据需要对其进行编辑。
您可以按类别将您 userhour
分组,然后对每个组进行计数:
SELECT c.category_name, count(*) AS total_userhours
FROM `userhour` u
JOIN `userhour_category` c
ON (u.userhour_category_id = c.id)
GROUP BY u.userhour_category_id
我没有测试查询,但它应该可以。