表(ストライピング不要なCOLS)を与えられたPKと次と前の行の位置を探しますリスト照会にあるように結果セット内の車の位置を見つける。前の行と次の行のURL。1つの結果行として問題になっている
私は多くの異なるアプローチを試みましたが、最終的に可能かどうかはわかりません。 (1つのクエリで)。
正しい方向への質問や指針に関する助けをいただければ幸いです。
EDIT:
所望の結果は次のようになります。
pos, nextid, nexturl, previd, prevurl
表(ストライピング不要なCOLS)を与えられたPKと次と前の行の位置を探しますリスト照会にあるように結果セット内の車の位置を見つける。前の行と次の行のURL。1つの結果行として問題になっている
私は多くの異なるアプローチを試みましたが、最終的に可能かどうかはわかりません。 (1つのクエリで)。
正しい方向への質問や指針に関する助けをいただければ幸いです。
EDIT:
所望の結果は次のようになります。
pos, nextid, nexturl, previd, prevurl
はこの1つ試してみてください離れてフィルタリングすることができます -
を+位置
SELECT car_id, url, signup, CONCAT(pos1, '/', @p1) position FROM (
SELECT
c.*,
@p1:[email protected]+1 pos1,
@p2:=IF(car_id = 3 AND @p2 IS NULL, @p1, @p2)
FROM
cars c,
(SELECT @p1:=0, @p2:=NULL) t
ORDER BY
signup
) t
WHERE
pos1 BETWEEN @p2 - 1 AND @p2 + 1
行あなたは書きました: を所望の結果は次のようになります。POS、NEXTID、nexturl、previd、prevurl
は、この文字列で検索してください:
SELECT
@p2 pos,
MAX(IF(pos1 > @p2, car_id, NULL)) nextid,
MAX(IF(pos1 > @p2, url, NULL)) nexturl,
MAX(IF(pos1 < @p2, car_id, NULL)) previd,
MAX(IF(pos1 < @p2, url, NULL)) prevurl
FROM (
SELECT
c.*,
@p1:[email protected]+1 pos1,
@p2:=IF(car_id = 3 AND @p2 IS NULL, @p1, @p2)
FROM
cars c,
(SELECT @p1:=0, @p2:=NULL) t
ORDER BY
signup
) t
WHERE
pos1 BETWEEN @p2 - 1 AND @p2 + 1
(SELECT car_id, url FROM car WHERE car_id = ?)
UNION
(SELECT car_id, url FROM car WHERE signup > (SELECT signup FROM car WHERE car_id = ?) ORDER By signup ASC LIMIT 1)
UNION
(SELECT car_id, url FROM car WHERE signup < (SELECT signup FROM car WHERE car_id = ?) ORDER By signup DESC LIMIT 1)
doesntの指定されたpkの位置をリストのクエリと同じように見つけます。とにかく助けてくれてありがとう。 – Rufinus
SELECT
@previd AS previousid,
@prevurl AS previousurl,
@previd:[email protected] AS currentid,
@prevurl:[email protected] AS currenturl,
@id:=car_id AS nextid,
@url:=url AS nexturl
FROM
(SELECT @previd:=0) AS initprevid,
(SELECT @prevurl:='') AS initprevurl,
(SELECT @id:=0) AS initid,
(SELECT @url:='') AS initurl,
car
WHERE currentid=<whatever>
ORDER BY
car.signup DESC
あなたが偽のcurrentid = 0
クエリ自体は動作しますが、行自体の位置だけを取得しません。ページ上のナビゲーションに使用され、ページを参照できるようにします。 < 15/280 >として示されている。 15は質問からの問合せの行の位置になります。あなたがあなたの答えでカバーした次の行と前の行 – Rufinus
...私はあなたの望む結果を見ました。クエリを書き直す必要があります。 – Devart
2番目のクエリを見てください。 – Devart