【问题标题】:MySQL SELECT and order as associative arrayMySQL SELECT 和 order 作为关联数组
【发布时间】:2016-03-10 13:02:30
【问题描述】:

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

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

我想要实现的输出如下:

大批 ( [0] => 类别名称 [total_userhours] => count(id) userhours [1] => 类别名称 [total_userhours] => count(id) userhours [2] => 类别名称 [total_userhours] => count(id) userhours )

因此,数组中的第一个结果具有类别名称,并在其下创建了一个变量,用于计算所有具有 userhour_category_id 的 userhours。

提前致谢, 罗德尼

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

谢谢大家。

【问题讨论】:

  • 我认识的第一个人用解决方案输出更新了问题哈哈,很好。

标签: php mysql select where


【解决方案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

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

【讨论】:

  • 工作就像一个魅力,感谢您回答我的问题并让我了解如何在 MySql 中进行复杂查询。
【解决方案2】:

你可以这样做:

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

并将列更改为您需要的列,但您应该得到与您期望的类似的输出。

(我看不到您的表名和/或对 userhour 的引用,所以只需根据需要进行编辑)。

【讨论】:

  • 没问题,根据需要切换。你也可以foreach$data来有效地使用它。即:foreach($data as $k=>$v): echo 'Project name: '.$k.'\n Id: '.$v['id']; //ect...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多