0

私は要素のリストを生成しようとしています:

  • オレンジ
  • 黄色+

その場合、オレンジが選択され、前に2つの要素があり、後に2つの要素があります。

MySQLクエリからこのリストを取得するにはどうすればよいですか?

テーブルの例:

5-A


1-B


4-C


8-D


7-E


9-F


3-G

4

3 に答える 3

0

ベース内の各要素のIDがある場合は、次のように実行できます。

SELECT element FROM table 
WHERE id BETWEEN (select (id - 2) from table where element = "orange") AND (select (id + 2) from table where element = "orange")
于 2012-07-26T09:35:06.393 に答える
0

それは動作するはずです:

SELECT id, color FROM colors WHERE id = (SELECT @i:=(id - 2) 
                                         FROM colors 
                                         WHERE color = 'orange')
UNION ALL
SELECT id, color FROM colors WHERE id = @i + 1
UNION ALL
SELECT id, color FROM colors WHERE id = @i + 3
UNION ALL
SELECT id, color FROM colors WHERE id = @i + 4;
于 2012-07-26T09:49:58.140 に答える
0

私はついにアプリケーションコードでそれを行いました:

def get_list_queryset(self):
    STEP = 5
    LIST_SIZE = 2*STEP+1
    current_object = self.get_object()
    query_set = list(self.model.objects.order_by(*self.model._meta.ordering))
    index = query_set.index(current_object)

    # Index too close to start
    if index < STEP:
        start_ind = 0
        end_ind = LIST_SIZE # We don't care if it's too big.
    # Index too close to end
    elif index+STEP >= len(query_set):
        end_ind = len(query_set)
        start_ind = end_ind>=LIST_SIZE and end_ind-LIST_SIZE or 0
    else:
        start_ind = index-STEP
        end_ind = start_ind+LIST_SIZE

    return query_set[start_ind:end_ind]

答えは、MySQLはそれを処理するのに適していないため、アプリケーションでそれを行う方が柔軟であるということです。

于 2012-09-07T12:40:52.840 に答える