2

私は面白い画像のデータベースを持っていますが、この質問は投稿日のすべてに関連しています。ページを更新する場合、最初に今日のエントリが設定されているかどうかを確認します。そうでない場合は、次のように、データベースに最も長く存在するエントリを取得します。

$result=mysql_query("SELECT * FROM amazingjokes.img WHERE listed=CURDATE()");
if(!mysql_num_rows($result)){
   $result=mysql_query("SELECT * FROM amazingjokes.img WHERE isnull(listed) 
                        ORDER BY  added ASC");
   $row=mysql_fetch_array($result);
   $mysql_query("UPDATE amazingjokes.img SET listed=CURDATE() 
                 WHERE id=$row[id]");
}

基本的にこれが行うことは、「今日の画像を取得し、今日の画像がない場合に最も長い保留中の画像を選択する」ことです。単一のクエリでこれを行うことは可能ですか?それはどのように行われますか?

4

3 に答える 3

2

次のようなことを試すことができます:

update amazingjokes.img 
    set listed=curdate() 
where 
    id IN (
        select 
            id 
        from 
            amazingjokes.img 
        where 
            isnull(listed) 
        order by 
            added asc
    )

そして、あなたが試すことができる穴3クエリを置き換えるために:

 update amazingjokes.img  
    set listed=curdate()
 where 
    id IN (
        select 
            id 
        from 
            amazingjokes.img 
        where 
            listed=curdate() 
        order by 
            added asc
    )
    AND (
        select 
            count(*) 
        from 
            amazingjokes.img 
        where 
            listed=curdate()
    ) = 0
于 2013-07-02T08:56:51.053 に答える
2

NULL を値に結合する場合、ソース データは更新されませんが (おそらくまだ更新したいでしょう)、select を変更して、今日の日付または日付のないものを元に戻すことができます。

SELECT * 
FROM amazingjokes.img 
WHERE COALESCE( listed, CURDATE() ) = CURDATE()
于 2013-07-02T08:59:07.860 に答える
1

私が最終的に得た解決策は、今日の画像に日付が設定されていない場合は、1 つのクエリと 2 つ目のクエリでした。

$img=mysql_fetch_array(mysql_query("
  SELECT * FROM amazingjokes.img
  WHERE listed=curdate() OR isnull(listed) 
  ORDER BY listed DESC, added ASC LIMIT 1"
));
if($img[0]["listed"]==null) 
  mysql_query("UPDATE amazingjokes.img SET listed=curdate() 
               WHERE id=".$img[0]["id"]);

これにより、日付のないもの、または今日の日付のものがすべて選択されます。「オーダー BY リスト」は、今日の画像が選択されている場合、それが一番上にあることを確認し、注文の「追加された ASC」は、今日の画像がない場合、最も長い保留中のものがリストの一番上にあることを確認します。私を正しい方向に導いてくれた@Stephanに感謝します!

于 2013-07-02T10:08:10.183 に答える