在mysql的while嵌套循環(huán)中,如果需要對每個循環(huán)中的結(jié)果進(jìn)行查詢,那么我們就需要在查詢條件中動態(tài)地獲取循環(huán)中的值。這個時候可以將查詢條件寫成字符串,然后在每次循環(huán)中動態(tài)拼接。
SET @sql = ''; SET @id = 0; WHILE @id< 10 DO SET @id = @id + 1; SET @sql = CONCAT('SELECT * FROM table WHERE id = ', @id); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END WHILE;
在上面的例子中,我們首先定義了一個空字符串和一個循環(huán)計數(shù)器@id。然后每次循環(huán)中都將@id加一,然后將查詢條件拼接到@sql字符串中。接著使用PREPARE語句將sql語句進(jìn)行準(zhǔn)備,并使用EXECUTE語句執(zhí)行sql語句。最后使用DEALLOCATE PREPARE釋放語句。
需要注意的是,在拼接sql語句時,如果涉及到字符類型的字段,需要在值的兩邊加上引號。如下面的例子:
SET @sql = ''; SET @name = ''; WHILE @name<>'end' DO SET @name = 'John'; SET @sql = CONCAT('SELECT * FROM table WHERE name = \'', @name, '\''); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END WHILE;
在上面的例子中,我們需要判斷變量@name的值是否為'end',如果是,則退出循環(huán)。否則就將@name的值設(shè)置為'John',并將查詢條件拼接到@sql字符串中。需要注意的是,由于單引號在字符串中是有特殊含義的,因此需要使用反斜杠進(jìn)行轉(zhuǎn)義。