0

我在 mysql 数据库中有列 a、b、c 和 d(为了简单起见)。

  • a 列是用户 ID #(非唯一)
  • b列是文件路径
  • c列是“组ID”
  • d 列是上传日期/时间

同时上传的文件具有相同的“组 ID”,分别存储在每个数据库条目中。

首先,我运行以下查询:
SELECT * FROM database WHERE a='$userid' ORDER BY d DESC

然后,我mysqli_fetch_assoc在循环中利用该函数while将数据输入到列表中(对于指定的 id,按上传日期排序,如上所示)。

我的问题是我需要在相同的提取输出中对具有相同“组 ID”的那些进行分组。这是否可以通过各种子查询来实现,或者我是否完全不充分地解决这个问题?如果有更好的 PDO 替代方案,我也很高兴看到这一点。

编辑:为了给这个问题更多的定义,请在下面找到代码:

因此,那些具有相同组 id 的条目应该放在同一个<li>

<body>
    <ul><?=$output?></ul>
</body>

$userid = $_SESSION['id'];
$output='';
$q = mysqli_query("SELECT * FROM database WHERE a='$userid' ORDER BY d DESC");

while($row=mysqli_fetch_assoc($q)){
    $output.=formatfxn($row['b'],$row['c'],$row['d']);
}

function formatfxn($filep,$groupid,$dt){
    if(is_string($dt)){
        $dt=strtotime($dt);
        if(is_file($filep) === true){
            $filel='<img class="postimg" src="'.$filep.'" />';
        }
    return '<li>'.$filel.'</li>';
    }
}
4

2 回答 2

2

从您的问题来看,尚不清楚您到底想要什么。但是,您似乎希望通过组 ID 以某种方式组织您的上传元素。

抱歉,我不会尝试处理名为 a、b、c、d 的列。

你可以这样做:

   SELECT * 
     FROM datatable
    WHERE user_id='$userid'
 ORDER BY group_id DESC

这将按组 id 降序为您提供您的项目。如果实际上具有相同 group_id 的项目具有相同的 upload_time,并且如果您按顺序分配 group_id 值,这将对您有用。

您是否需要为每个 group_id 值获取一行?你可以试试这个:

   SELECT user_id, 
          group_id, 
          MIN(upload_time) upload_time, 
          GROUP_CONCAT( filepath 
                        ORDER BY upload_time, filepath 
                       SEPARATOR ';') filepaths
     FROM datatable
    WHERE user_id=1
 GROUP BY user_id, group_id
 ORDER BY upload_time DESC

http://sqlfiddle.com/#!2/4f2df/1/0

这将为您提供一个以分号分隔的文本字段中的文件路径。行和文件名将按每个组中第一项的更新时间排序。

于 2012-09-05T18:15:01.340 回答
0

首先,您的标签是 PDO,因此如果您使用的 PDO 语法不正确

我会做这样的事情(如果我理解正确,你有点含糊)

$st= $db->prepare("SELECT * FROM database WHERE a=? ORDER BY d DESC");
$st->setFetchMode(PDO::FETCH_ASSOC);
$data=array($userid);
$st->execute($data);
while($something=$data->fetch()){

//handle $something as you want. 
}

我建议对 id 执行类似 array unique(search it) 之类的操作,然后您将获得每个 id 的关联数组。

在这里,我还在这里找到了一些可能对您有帮助的东西(与我的评论并行): Array Unique with Associative Array - Remove Duplicates 接受的答案可以解决您的问题。(+1那个人)

于 2012-09-05T18:35:18.613 回答