select 限制在 sql
select limit in sql
我写了这个查询,但在第 15 行(限制子句)给我一个错误。
我们有 3 个表,state、email 和 receiver。
CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
BEGIN
set @curr = ( SELECT entered_accounts.username
FROM entered_accounts
WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
SET @tmp = page_number-1;
SET @offset = page_size * @tmp;
SELECT email.subject, email.body, email.time, state.readed, state.deleted
FROM email INNER JOIN reciever USING(email_id)
INNER JOIN state USING (email_id)
WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
ORDER BY email.time DESC
LIMIT @offset,page_size;
END
MySQL 不支持 LIMIT
子句中的用户变量。相反,您可以使用常规变量:
DELIMITER //
CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
BEGIN
DECLARE v_offset INT;
SET @curr = ( SELECT entered_accounts.username
FROM entered_accounts
WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
SET @tmp = page_number-1;
SET v_offset = page_size * @tmp;
SELECT email.subject, email.body, email.time, state.readed, state.deleted
FROM email INNER JOIN reciever USING(email_id)
INNER JOIN state USING (email_id)
WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
ORDER BY email.time DESC
LIMIT v_offset, page_size;
END//
我写了这个查询,但在第 15 行(限制子句)给我一个错误。 我们有 3 个表,state、email 和 receiver。
CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
BEGIN
set @curr = ( SELECT entered_accounts.username
FROM entered_accounts
WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
SET @tmp = page_number-1;
SET @offset = page_size * @tmp;
SELECT email.subject, email.body, email.time, state.readed, state.deleted
FROM email INNER JOIN reciever USING(email_id)
INNER JOIN state USING (email_id)
WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
ORDER BY email.time DESC
LIMIT @offset,page_size;
END
MySQL 不支持 LIMIT
子句中的用户变量。相反,您可以使用常规变量:
DELIMITER //
CREATE PROCEDURE `inbox`(IN `page_size` INT,IN `page_number` INT)
BEGIN
DECLARE v_offset INT;
SET @curr = ( SELECT entered_accounts.username
FROM entered_accounts
WHERE entered_accounts.time = (SELECT Max(entered_accounts.time) FROM entered_accounts));
SET @tmp = page_number-1;
SET v_offset = page_size * @tmp;
SELECT email.subject, email.body, email.time, state.readed, state.deleted
FROM email INNER JOIN reciever USING(email_id)
INNER JOIN state USING (email_id)
WHERE state.username=reciever.username AND LOWER(reciever.username)=LOWER(@curr) AND NOT reciever.username=email.username
ORDER BY email.time DESC
LIMIT v_offset, page_size;
END//