2017-08-11 77 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