2016-07-27 109 views
4

我試圖從2列得到一個標準和索引他們使用此查詢MYSQL指數在查詢中的變量

$query1 = "SET @row_num = 0"; 
$query2 = "SELECT *, @row_num := @row_num + 1 as row_index FROM gift 
      WHERE Category = '0' AND ID ='".$ID."' 
      ORDER BY ID ASC;"; 
mysqli_query($conn, $query1); 

$retrieve = mysqli_query($conn, $query2); 

是否存在,我可以使用ROW_INDEX爲變量的方法在查詢中,像這樣:

$query1 = "SET @row_num = 0"; 
$query2 = "SELECT *, @row_num := @row_num + 1 as row_index FROM gift 
      WHERE Category = '0' AND row_index ='".$ID."' 
      ORDER BY ID ASC;"; 
mysqli_query($conn, $query1); 

$retrieve = mysqli_query($conn, $query2); 
+0

爲什麼所有這些@s? –

+0

變量@row_num用於將row_index列的每一行增加1. –

+0

'row_index = @ row_num'? – bishop

回答

3

您可以在HAVING條款測試爲$ID

$query1 = "SET @row_num = 0"; 
$query2 = "SELECT *, @row_num := @row_num + 1 as row_index FROM gift 
      WHERE Category = '0' 
      HAVING row_index = $ID 
      ORDER BY ID ASC;"; 
mysqli_query($conn, $query1); 

$retrieve = mysqli_query($conn, $query2); 

在查詢中不需要連接變量。如果$ID是一個整數,則不需要引號,並且如果它是字母數字,只需將它括在單引號中,因爲PHP將正確插入變量。


Reference for HAVING clause

+0

非常感謝,這對我來說非常合適。 –

+0

很高興能幫到@ user6645308 –

+0

'ORDER BY'可能是不必要的。 –

0

而無需實際測試它,我希望類似如下的工作....

SELECT ilv.* 
FROM (
    SELECT gift.*, @row_num := @row_num + 1 as row_index 
    FROM gift 
    WHERE Category = '0' 
    ORDER BY ID ASC 
) ilv 
WHERE row_index ='".$ID."'; 

(但你不應該引用整數值)。

或者....

SELECT * 
FROM gift 
WHERE Category = '0' 
ORDER BY ID ASC 
LIMIT $ID, 1; 

或者,與最近的MySQL,使用MyISAM引擎,可以define a primary key based on a natural key and autoincrement value。在你的情況下,「自然」鍵將是類別。然後,如果你確保你是在單調區間分配數據庫中的存儲的ID ,只是.....

SELECT * 
FROM gift 
WHERE category='0' 
AND id=($ID * $interval);