MySQL SELECT 并作为关联数组排序


MySQL SELECT and order as associative array

首先感谢您的查看,我有一个mysql问题,老实说我不知道如何解决。如果有人能帮助我,我将不胜感激。

我的mysql数据库中有以下两个表(见下面的链接)http://www.rodneywormsbecher.com/sql-tables.jpg

我想实现的输出如下:

阵列 (    [0] => category_name        [total_userhours] => 计数(id) 用户小时数    [1] => category_name        [total_userhours] => 计数(id) 用户小时数    [2] => category_name        [total_userhours] => 计数(id) 用户小时数)

因此,数组中的第一个结果具有类别名称,在它下面,它会创建一个变量,用于计算具有userhour_category_id的所有用户小时数。

提前感谢,罗德尼

/编辑 我从回复中得到了 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);

两者都像 Charm 一样工作,但我更喜欢 SQL 的方式来做到这一点。

输出:

 数组(    [平面设计] => 15    [网页设计] => 9    [时事通讯] => 1)数组(    [0] => 数组        (            [category_name] => 网页设计            [total_userhours] => 9        )    [1] => 数组        (            [category_name] => 平面设计            [total_userhours] => 15        )    [2] => 数组        (            [category_name] => 时事通讯            [total_userhours] => 1        ))

谢谢大家。

您可以按类别对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

我没有测试查询,但它应该可以工作。

你可以

这样做:

$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();

并将列更改为所需的内容,但您应该获得与预期类似的输出。

(我看不到您的表名称和/或对用户小时事物的引用,因此请根据需要对其进行编辑)。