1

基本的に私がやろうとしているのは、行のIDをMySQLの15の結果と比較し、1つを除くすべてを削除して(を使用してNOT IN)、その結果をプルすることです。

通常、これはそれ自体で問題ありませんが、SQLクエリを実行している15行の順序はランキングに基づいて絶えず変化しているため、ランキングが更新されてからajaxリクエスト( )のIDを送信します。NOT IN複数のIDが変更されたため、もちろん、不要な複数の行が返されます。

つまり、15行をクエリできるが、1行しか返さない方法はありますか?2つの別々のクエリを実行する必要はありません。

データベースに7つのアイテムがあり、ページに5つをユーザーに表示しているとします。

これらは、ユーザーに表示されているものです。

Apple
Orange
Kiwi
Banana
Grape

しかし、データベースには私も持っています

Peach
Blackberry

今私がやりたいのは、ユーザーがリストからアイテムを削除すると、別のアイテムが追加されることです(彼らが持っているランキングに基づいて)

問題は、残りのアイテムをデータベースに送信する時点でリストに何があるかを知るためです(たとえば、Kiwiを削除した場合、Apple、Orange、Banana、Grapeを送信します)

そこで、残りの6つのアイテムから最高ランクの5つのアイテムを選択し、それらがページに既に表示されているものではないことを確認してから、新しいアイテムをリストに追加します(PeachまたはBlackberryのいずれか)。

ピーチとブラックベリーの両方がブドウを上回った場合を除いて、すべて順調です。1つではなく2つの結果が返されます。問い合わせたので...

Apple
Orange
Banana
Peach
Blackberry

除外...

Apple
Orange
Banana
Grape

これにより、ピーチやブラックベリーだけでなく、ピーチとブラックベリーの両方が残ります。

4

2 に答える 2

1

何をしようとしているのかによって(例を見るとよいでしょう)、ネストされたクエリで実行できる場合があります。方法を説明するこの投稿を参照してください

于 2012-06-04T22:26:39.223 に答える
0

要件を完全に理解したかどうかはわかりませんが、試してみます。次の例は私の理解に基づいており、上位5行のみを表示することを前提としています。

SELECT
  UL.ItemName
FROM
  UserList UL
WHERE
  (UL.Deleted = 0) -- Take only items that are NOT deleted

UNION -- UNION clause discards duplicate entries, unlike UNION ALL

SELECT
  I.ItemName
FROM
  (SELECT
    IL.ItemName
  FROM
    ItemList IL -- This is the table containing ALL Items
  ORDER BY
    IL.Ranking ASC -- Most important Items first, supposing that a lower number in Ranking means higher priority
  ) AS I
LIMIT 5 -- Display only top five entries

:このクエリはテストされておらず、ORDER BY句がないため、常に正しい順序でアイテムが返されるとは限らない可能性があります。したがって、それは完全な解決策としてではなく、提案としてとらえるべきです。

于 2012-06-04T23:16:54.597 に答える