2017-08-11 57 views
1

即时通讯寻求从库MySQLi显示卷,但我想显示一个是和一个没有...例如显示滚动

如果我用这个代码:

$sqldisplay = $mysqli->query("SELECT `id` FROM `albums` ORDER BY `id` DESC LIMIT 5"); 
while ($rowdisplay = $sqldisplay->fetch_assoc()) { 

echo $rowdisplay['id'].'<br>'; 

} 

它会显示

10 
9 
8 
7 
6 

但即时寻找到这样显示的:

10 
8 
6 
4 
2 

它是否可行?如果是这样,那该怎么办?

感谢您的帮助! :D

+0

你的意思,你只是想连号,而不是奇的呢? – Qirel

+0

我想到了,但如果我添加一个新的行,那么它将不得不改变代码,使其相反方向:( – EnterateNorte

+0

你想选择奇数,如果最高的ID是奇数,甚至数字如果最高的ID是甚至? – Qirel

回答

0

很简单,只需检查ID的模数是否为0(无余数)即可返回偶数。

如果你想返回奇数,改变模等于1

如果你想选择奇数或偶数根据用户输入的数字,你可以很容易地if语句做出并使用Prepared Statements输入请求编号(1表示要返回奇数ID行,0表示偶数行)。

SELECT `id` FROM `albums` WHERE `id` % 2 = 0 ORDER BY `id` DESC LIMIT 5 

所以,你的代码将是:

$sqldisplay = $mysqli->query("SELECT `id` FROM `albums` WHERE `id` % 2 = 0 ORDER BY `id` DESC LIMIT 5"); 
while ($rowdisplay = $sqldisplay->fetch_assoc()) 
{  
echo $rowdisplay['id'].'<br>';  
} 
0

当您为了设置ID by.your结果是根据插入每一列

你必须在你表中添加此列。例如您可以有orderBy,您可以指定每个显示列的顺序 然后您的查询相同

$sqldisplay = $mysqli->query("SELECT `id` FROM `albums` ORDER BY `orderBy` DESC LIMIT 5"); 
1

要显示交替行,请先将您的限制加倍。

$sqldisplay = $mysqli->query("SELECT `id` FROM `albums` ORDER BY `id` DESC LIMIT 10"); 

然后使用布尔开关来确定是否显示每一行。

$display = true; 

while ($rowdisplay = $sqldisplay->fetch_assoc()) { 

    if ($display) echo $rowdisplay['id'].'<br>'; 

    $display = !$display; // switch the display on/off 

} 

这样一来,你就不必依赖于ID的价值,东西,如果任何标识丢失,由于删除行,可能会产生意想不到的效果等数字ID是一个代理键,其除了唯一标识一行外,没有其他意义。

1

使用WHERE (id % 2) = 0会给你只偶数,并使用WHERE (id % 2) > 0会让你奇数。

您可以使用此选项以及选择MAX(id)的子查询并返回1(奇数)或0(偶数)。这将确保如果id是偶数,只要偶数ID将被返回,反之亦然,当应用上面段落中解释的逻辑时。

SELECT `id` 
FROM `albums` 
GROUP BY `id` 
HAVING `id` % 2 = (CASE WHEN (SELECT MAX(`id`) FROM `albums`) % 2 = 0 THEN 0 ELSE 1 END) 
ORDER BY `id` DESC 
LIMIT 5 

下面保罗的评论,它已经指出,你可以更加清理查询,只是在做WHERE id % 2 = (SELECT MAX(id) % 2 FROM albums)代替 - 这样,你不应该需要任何GROUP BY..HAVING

SELECT `id` 
FROM `albums` 
WHERE id % 2 = (SELECT MAX(id) % 2 FROM albums) 
ORDER BY `id` DESC 
LIMIT 5 

,如果你想取回两个数据集,请不要惊慌的回答说(虽然我更喜欢如果可能这样做在MySQL),你也可以做到这一点在PHP。

+1

'WHERE id%2 =(SELECT MAX(id)%2 FROM albums)'也应该可以工作,不需要GROUP BY和HAVING –

+0

的确如此 - 甚至没有想到(简单到最好,呃?)我在查询时玩弄了,并且在之前的条件下直接使用了集合函数MAX(),这就是为什么它被分组的原因(然后在'HAVING'中有条件)你的方法比较干净,我会编辑它。干杯! – Qirel