Php 用空行填充查询结果
我有以下查询,用于返回游戏中的最高分数,但如果记录少于10条,我希望用空行填充该查询:Php 用空行填充查询结果,php,sql,mysql,Php,Sql,Mysql,我有以下查询,用于返回游戏中的最高分数,但如果记录少于10条,我希望用空行填充该查询: SELECT id, MAX(score) mscore FROM scores WHERE id IN (".implode(',', $data).") GROUP BY id ORDER BY mscore DESC" 逻辑是将一组用户ID传递给查询,然后对得分最高的ID进行排序并形成前十名,许多ID还没有得分,因此一些前十名查询只返回3或4行。我如何填写查询结果,直到我有10个?ID引用照片等。在M
SELECT id, MAX(score) mscore FROM scores WHERE id IN (".implode(',', $data).") GROUP BY id ORDER BY mscore DESC"
逻辑是将一组用户ID传递给查询,然后对得分最高的ID进行排序并形成前十名,许多ID还没有得分,因此一些前十名查询只返回3或4行。我如何填写查询结果,直到我有10个?ID引用照片等。在MySQL中,您可以使用
limit
选择前10行
SELECT id, MAX(score) mscore
FROM scores
WHERE id IN (".implode(',', $data).")
GROUP BY
id
ORDER BY
mscore DESC
LIMIT 10
不要在mysql中这样做。
使用php获取结果集时,只需根据需要添加空结果。
(表示空数组字段)
然后继续添加空行,直到集合中正好有10个结果
while(count($data) <= 10)
{
$data[] = array();
}
while(count($data)就像@Thariaman所说的(+1)不要在MySql中这样做,因为它会更麻烦,将来也更难支持
我会尝试类似的方法(用空键填充数组,这样脚本在试图访问它们(或其他)时不会抛出警告)
函数getMaxScores($gameid){
$result=query(“从分数中选择id、MAX(分数)mscore”。
其中id位于(“.infrade(',',$data)。”)。
“按id分组按mscore描述的订单限制10”
);
如果(计数($result)<10){
$result=array\u pad($result,10,数组(“id”=>,“mscore”=>);
}
返回$result;
}
虽然我同意您应该在脚本中而不是在查询本身中处理此问题,但我想到的一件事是:
SELECT * FROM (
(
SELECT id, MAX(score) mscore FROM scores
WHERE id IN (1,4) GROUP BY id ORDER BY mscore DESC
)
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
) as t LIMIT 10
但是如果我在评论中看到这样的代码,开发人员会得到一个“orly?”注释;-)我会创建一个包含十行基本默认数据的默认表。
然后,用十个默认行的并集选择所需的记录,如果需要硬编码,则将输出限制为10;如果不需要硬编码,则将输出限制为默认表上的计数。在脚本中执行此操作时,为什么要在sql中执行此操作?只需一件事,我需要数组携带ID,如果分数为空,则可以为什么我认为用sql更容易实现呢
for($i=0; $i<=10; $i++)
{
if(isset($data[$i]))
{
//Show data from $data[$i]
}else
{
show block row.
}
}
function getMaxScores($gameid) {
$result = query("SELECT id, MAX(score) mscore FROM scores ".
"WHERE id IN (".implode(',', $data).")".
"GROUP BY id ORDER BY mscore DESC LIMIT 10"
);
if(count($result) < 10) {
$result = array_pad($result, 10, array("id" => "", "mscore" => "");
}
return $result;
}
SELECT * FROM (
(
SELECT id, MAX(score) mscore FROM scores
WHERE id IN (1,4) GROUP BY id ORDER BY mscore DESC
)
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
UNION ALL(SELECT '--', '')UNION ALL(SELECT '--', '')
) as t LIMIT 10