私はしばらくこれを回避しようとしてきましたが、問題が何であるかを理解できないようです。問題がどこにあるかを知っていれば、解決策を探したでしょうが、なぜこのように振る舞うのかわかりません。
とにかく、私はこのテーブルを持っています:
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 OS で行 53 と 21 を取得しようとしたときにのみ発生するようです。問題がある場合は、Linux Mint を使用しています。他の値を取得しようとすると、完全にうまくいくようです。これら2つの値の問題が何であるかはわかりません。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;
私が何かを見逃している場合は、私を夢中にさせているので教えてください.