1

私の場合、誰かが私のニュース Web データに 60 万件のレコードを投稿している場合、過去数時間に誰かが同じ件名で投稿したタイトルと同じタイトルを作成できます。

data: sid|title|desc|timestamp|userid

通常私は使用します:

select sid from ".$prefix."_stories WHERE title = '".$subject."' limit 0,1

すべてのデータを検索し$subject、同じタイトルの場合は通知ポスターを検索します。最後の 100 レコードを検索するクエリが必要です。

私は次のことを試しましたが、これはうまくいきませんでした:

select sid from ".$prefix."_stories WHERE title = '".$subject."' and sid > MAX(sid)-100 limit 0,1
4

3 に答える 3

2

これは、最後の 100 を返すサブクエリで行うことができますsid。ここでは、簡潔にするために PHP 連結を省略していることに注意してください。

SELECT
  last100.sid
FROM
  (
    SELECT
      sid,
      title
    FROM $prefix._stories 
    ORDER BY sid DESC LIMIT 100
  ) last100
WHERE
  last100.title = '$subject'
于 2012-05-08T02:27:27.210 に答える
0

sidで並べ替え(降順なので、最新のエントリが最初に来る)、結果を100に制限します。

$sql = "select t.sid from (select sid, title from ".$prefix."_stories ORDER BY sid DESC LIMIT 0,100) t WHERE title = '".$subject."';"

SQLインジェクションを回避するために、必ず$ subjectをチェックしてください(より良い:プリペアドステートメント/ PDOを使用してください)。

于 2012-05-08T02:50:26.383 に答える
0

主キーがあり、すべてのレコードで 1 ずつ増加すると仮定すると (これにより、一番下に最新のものが配置されます)、次のようにします。

SELECT sid, title
FROM ".$prefix."_stories
ORDER BY sid DESC 
LIMIT 100

これにより、最後の 100 レコードが選択されます

私のコメントでのマイケルの良い点...コードに編集して、さらにコメントしてください:

where 句を削除すると、最後の 100 レコードが選択されます... ループを実行して、タイトルまたは概要が既に存在するかどうかを確認します。

while ($row = $result) {
   if $subject = $row['title'] {
      $duplicate = TRUE;
      endwhile;
   }
}

結果のデータを比較するだけです。ありがとうマイケル

于 2012-05-08T02:27:42.817 に答える