表Aの会社名とその詳細を表示しているページがあります。次に、会社を表示し、その名前を「Company_one」とすると、次の会社と前の会社とその詳細などをアルファベット順に並べ替えます。
テーブル内のデータは並べ替えられていません。データを取得するときに保存されます。
では、アルファベット順にソートされた前のレコードと次のレコードが1つだけになるように、どのようなクエリを作成する必要がありますか?Plzヘルプ!!
表Aの会社名とその詳細を表示しているページがあります。次に、会社を表示し、その名前を「Company_one」とすると、次の会社と前の会社とその詳細などをアルファベット順に並べ替えます。
テーブル内のデータは並べ替えられていません。データを取得するときに保存されます。
では、アルファベット順にソートされた前のレコードと次のレコードが1つだけになるように、どのようなクエリを作成する必要がありますか?Plzヘルプ!!
単一のクエリでそれを行うための良い方法はありません。2つのクエリを実行するだけです。
前のものを取得するには:
SELECT * FROM companies
WHERE name < variable_with_current_name
ORDER BY name DESC
LIMIT 1
次のものを手に入れるには:
SELECT * FROM companies
WHERE name > variable_with_current_name
ORDER BY name ASC
LIMIT 1
テーブルを並べ替えるには、 sort句を使用する必要があります。のプロトタイプsort
は次のとおりです。
sort by fieldname
クエリの例:
select * from your_table sort by company asc
レコードを制限する場合は、次のlimit
句を使用します。
select * from your_table sort by company asc limit 0, 1
Dominicの回答に基づいて、とを組み合わせることで、単一のクエリを使用して同じ結果を得ることができWHERE
ますOR
。
例えば:
SELECT * FROM `companies`
WHERE (
`name` = IFNULL(
(SELECT `name` FROM `companies`
WHERE `name` < 'variable_with_current_name'
ORDER BY `name` DESC
LIMIT 1)
, 0)
OR
`name` = IFNULL(
(SELECT `name` FROM `companies`
WHERE `name` > 'variable_with_current_name'
ORDER BY `name` ASC
LIMIT 1)
, 0)
)
お役に立てば幸いです。