首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在php中执行循环时没有获得所有必要的数据

在php中执行循环时没有获得所有必要的数据
EN

Stack Overflow用户
提问于 2019-05-31 21:54:06
回答 2查看 40关注 0票数 0

我正在尝试创建一个页面,其中列出了在不同月份销售商品的所有用户,但每个用户都可以在该月的不同日期销售商品。这就是我想要得到的。

代码语言:javascript
运行
复制
January
user 1
user 4
user 5

February
user 4
user 2
user 3

我设法让它列出月份,但它每个月只显示一个用户。例如

代码语言:javascript
运行
复制
January
user 1

February
user 4

以下是我的代码

代码语言:javascript
运行
复制
$sql = "SELECT * FROM users INNER JOIN items ON users.id = items.user_id GROUP BY Year(items.sold_date), Month(items.sold_date)";
$result = mysqli_query($con, $sql);

$mnt = "";
while($row = mysqli_fetch_array($result))
{
    if($row['sold_date'] != $mnt)
    {
        echo date('F, Y', strtotime($row['order_date'])); 
        echo "<br/>";
    }

    echo $row['name'];
}

我的用户表

代码语言:javascript
运行
复制
id | name   | lastname        
1  | user 1 | user 1 lastname 
2  | user 2 | user 2 lastname 
3  | user 3 | user 3 lastname 
4  | user 4 | user 4 lastname 
5  | user 5 | user 5 lastname 

我的项目表

代码语言:javascript
运行
复制
id| name   |description         | user_id | sold_date
1 | item 1 | item 1 description | 3       | 2017-01-25
2 | item 2 | item 2 description | 1       | 2017-01-30
3 | item 3 | item 3 description | 5       | 2017-02-14
4 | item 4 | item 4 description | 2       | 2017-05-01
5 | item 5 | item 5 description | 1       | 2018-09-06
6 | item 6 | item 6 description | 4       | 2018-10-23

我希望我的解释是正确的。如果没有,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2019-05-31 22:39:12

如果您想在一行中打印带有分隔符的in,我建议您使用GROUP_CONCAT()。查询将如下所示:

代码语言:javascript
运行
复制
SELECT 
    Year(items.sold_date) as 'Year Sold',
    Month(items.sold_date as 'Month Sold',
    GROUP_CONCAT(distinct users.id) as 'Unique User Ids'
FROM users
INNER JOIN items
ON users.id = items.user_id
GROUP BY 
    Year(items.sold_date),
    Month(items.sold_date);

如果您希望在每年/每月的几行中获得所需的结果,您可以通过以下方式将users.id列添加到您的组中:

代码语言:javascript
运行
复制
SELECT * FROM users
INNER JOIN items
ON users.id = items.user_id
GROUP BY 
    Year(items.sold_date),
    Month(items.sold_date),
    users.id;
票数 0
EN

Stack Overflow用户

发布于 2019-06-01 03:47:30

这看起来像是给了你想要的输出。

代码语言:javascript
运行
复制
$sql = '
SELECT
    YEAR(I.sold_date) sold_date_Y,
    MONTH(I.sold_date) sold_date_M,
    U.name,
    COUNT(I.user_id)

FROM users 
    AS U

INNER JOIN items 
    AS I 
    ON I.user_id = U.id

GROUP BY 
    YEAR(I.sold_date), 
    MONTH(I.sold_date),
    U.name

ORDER BY
    YEAR(I.sold_date), 
    MONTH(I.sold_date),
    U.name';

$result = mysqli_query($con, $sql);

$savYM = '';
while($row = mysqli_fetch_array($result)){
    $curYM = $row['sold_date_Y'].'-'.$row['sold_date_M'];
    if($curYM != $savYM){
        echo '<br/>'. date('F, Y', strtotime($curYM)) .'<br/>'; 
    }
    echo $row['name'].'<br/>';
    $savYM = $curYM;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56396442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档