0

私はこのテーブルを持っています:

CREATE TABLE IF NOT EXISTS `razorphyn_support_list_messages` (
`id`                BIGINT(15)  UNSIGNED        NOT NULL    AUTO_INCREMENT,
`user_id`           BIGINT(11)  UNSIGNED        NOT NULL,
`message`           TEXT                        NOT NULL,
`ticket_id`         BIGINT(11)  UNSIGNED        NOT NULL,
`ip_address`        VARCHAR(20)                 NOT NULL,
`created_time`      DATETIME                    NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20;

そして、次のクエリで行を選択します (初回のみ):

SELECT `user_id`,`message`,`created_time` 
FROM ".$SupportMessagesTable." 
WHERE `ticket_id`=? 
ORDER BY created_time DESC LIMIT 10

それは問題ありませんが、他の行を取得する AJAX スクリプトを呼び出した後、関数は PHP スクリプトにいくつかの情報を送信し、それらの間にサーバーから肯定応答があるたびに増加する var (オフセット) もあります。
問題は、レコードを最新のものから古いものまで表示したいのですが、「最後の行-オフフェスト」をクエリから除外する方法がわからないことです:

$query = "SELECT `user_id`,`message`,`created_time` 
FROM ".$SupportMessagesTable." 
WHERE ticket_id=? AND 'last row'-".$offset.") 
ORDER BY created_time DESC LIMIT ".$postnumbers;

私はこのようなことを考えましたが、明らかに間違っています(残念ながら私はmysqlをあまり知りません):

"SELECT `user_id`,`message`,`created_time` 
FROM ".$SupportMessagesTable." 
WHERE ticket_id=? 
ORDER BY created_time DESC 
LIMIT 
((SELECT COUNT(*) 
FROM ".$SupportMessagesTable." 
WHERE ticket_id=?)-".$offset."),".$postnumbers;

$postnumbersは 10 に等しく、 の最初の値$offsetは 21 で、呼び出しが成功するたびに 10 ずつ増加します

これらは記録です:

 id,user_id,message,ticket_id,ip address, created_time
    (1, 55, '<p>ciao ciao</p> <p>ciao</p> ', 41, '127.0.0.1', '2013-05-15 06:26:01'),
    (2, 55, '<p>ciao ciao</p> <p>ciao</p> ', 41, '127.0.0.1', '2013-05-16 09:29:43'),
    (3, 55, '1', 41, '127.0.0.1', '2013-05-16 17:06:01'),
    (4, 55, '2', 41, '127.0.0.1', '2013-05-16 17:07:01'),
    (5, 55, '3', 41, '127.0.0.1', '2013-05-16 17:08:01'),
    (6, 55, '4', 41, '127.0.0.1', '2013-05-16 17:09:01'),
    (7, 55, '9', 49, '127.0.0.1', '2013-05-16 17:14:01'),
    (8, 55, '5', 41, '127.0.0.1', '2013-05-16 17:10:01'),
    (9, 55, '6', 41, '127.0.0.1', '2013-05-16 17:11:01'),
    (10, 55, '7', 41, '127.0.0.1', '2013-05-16 17:12:01'),
    (11, 55, '8', 41, '127.0.0.1', '2013-05-16 17:13:01'),
    (12, 55, '9', 41, '127.0.0.1', '2013-05-16 17:14:01'),
    (13, 55, '9', 49, '127.0.0.1', '2013-05-16 17:14:01'),
    (14, 55, '10', 41, '127.0.0.1', '2013-05-16 17:15:01');

最初の実行では、ID 14 と 12 から 7 (異なるチケット ID) を除いて 3 を選択します。2 番目のクエリでは、ID 1 と 2 を選択します。
おそらく最も簡単な解決策は、取得$postnumbers*number of callsしてからwhileループすることです。 10個ですが、あまり効率的ではないと思います

4

1 に答える 1

0

これがあなたの意図するものかどうかはわかりませんが、たとえば次の 10 を取得するには

SELECT `user_id`,`message`,`created_time` 
FROM ".$SupportMessagesTable." 
WHERE `ticket_id`=? 
ORDER BY created_time DESC LIMIT 11, 10
于 2013-05-16T19:46:34.690 に答える