我一直在努力解决这个问题,但我似乎无法弄清楚问题所在。如果我知道问题出在哪里,我会寻找解决方案,但我不明白为什么会这样。
所以无论如何,我有这张桌子:
CREATE TABLE `comments` (
`comment_id` bigint(20) NOT NULL AUTO_INCREMENT,
`comment_what_id` bigint(20) NOT NULL,
`comment_user_id` bigint(20) NOT NULL,
`comment_owner_id` bigint(20) NOT NULL,
`comment_extra` int(11) NOT NULL,
`comment_type` tinyint(3) NOT NULL,
`comment_text` text NOT NULL,
`comment_date` int(12) NOT NULL,
PRIMARY KEY (`comment_id`),
KEY `comments_user_id` (`comment_user_id`),
KEY `comment_type` (`comment_type`),
KEY `comment_what_id` (`comment_what_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这是我的行:
INSERT INTO `comments` (`comment_id`, `comment_what_id`, `comment_user_id`, `comment_owner_id`, `comment_extra`, `comment_type`, `comment_text`, `comment_date`) VALUES
(109, 21, 1, 1, 10, 1, 'first', 1363915838),
(110, 21, 1, 1, 10, 1, 'second\n', 1363915847),
(114, 21, 1, 1, 10, 1, 'third\n', 1363915891),
(115, 21, 1, 1, 10, 1, 'fourth\n', 1363915896),
(117, 21, 1, 1, 10, 1, 'last', 1363915911),
(154, 53, 10, 1, 10, 1, 'Hello! :D\n', 1363968585)
现在,当我尝试获取每个(即和)的第一n
行时, MySQL 有时会断开连接,有时我会在所有返回的行中获取值,并且每一行中的列都是完全空的。
这似乎只发生在 Linux 操作系统中,当我尝试获取第 53 和 21 行时。顺便说一句,如果这很重要,我正在使用 Linux Mint。当我尝试获取其他值时,它似乎工作得很好。我不知道这两个值是怎么回事。comment_what_id
53
21
0
comment_text
所以,这是我的查询:
set @num := 0, @type := '';
SELECT * FROM (
SELECT
comment_id,
comment_what_id,
comment_owner_id,
comment_extra,
comment_text,
comment_date,
@num := if(@type = `comment_what_id`, @num + 1, 1) as `row_number`,
@type := `comment_what_id` as dummy
FROM `comments`
WHERE `comments`.comment_what_id IN (53,21) AND comment_type = 1
ORDER BY comment_what_id, comment_date DESC
) `all` WHERE row_number <= 4;
如果我遗漏了什么,请告诉我,因为它让我发疯。