0

タイトルがわかりにくい場合は申し訳ありませんが、これは初めてです。私はある種の単純なphp/mysqlギャラリーを構築しています。ユーザーが最初にアクセスしたときに最新の25エントリが表示され、リスト内の個々のアイテムへのオフサイトリンクも可能になります。URLにIDが含まれている場合、javascriptはそのIDまでスクロールします。ただし、25以上のエントリがある場合、クエリが最新の結果をフェッチする可能性がありますが、URLにIDとして含まれている古いエントリは省略されます。

つまり、私はこのようなことをする必要があるということです...

SELECT * FROM `submissions` WHERE uid='$sid'

しかし、その後、特別なIDを持つ提出物を正常に見つけた後、

SELECT * FROM `submissions`  ORDER BY `id` DESC LIMIT 0, 25`

ギャラリーの残りの部分にデータを入力できるようにします。

そのデータベースを2回クエリすることもできますが、それを回避するための気の利いた方法があると思います。MySQLは(最新、ビュー、およびその他の変数に基づいて)すべてを順序付けており、2つのクエリを使用するとそれが壊れます。

4

2 に答える 2

2

次のように UNION 全体で制限できます。

(SELECT * FROM submissions WHERE uid = '$uid')
UNION
(SELECT * FROM submissions WHERE uid <> '$uid' ORDER BY `id` LIMIT 25)
LIMIT 25

最初のクエリが結果を返す場合のように 2 回リストされていることに注意してくださいLIMIT。ユニオン セットには 26 個の結果があります。これにより、返されたソート結果セットの最初に「検索対象」アイテムが配置されます (他の 24 個の結果がソート順に表示されます)。これが望ましくない場合はORDER BY、結合を横切って配置することもできますが、たまたま 26 番目のレコードになると、検索結果が切り捨てられます。

すべてがソートされている 25 行が必要な場合は、2 つのクエリ アプローチ (最初のクエリが一致したかどうかに応じて、2 番目のクエリを 24 または 25 レコードに制限する) を実行してから、単純に uid を挿入する必要があると思います。 -一致した結果は、表示前に適切な場所でソートされたレコードに格納されます。

于 2013-02-19T22:07:42.953 に答える
0

より良い解決策は次のとおりだと思います。

SELECT *
FROM `submissions`
order by (case when usid = $sid then 0 else 1 end),
         id desc
limit 25

union結合の順序で結果を返すことが保証されているとは思いません(標準または他のデータベースでは保証されていません)。

于 2013-02-19T22:19:34.790 に答える