タイプを保ちますVARCHAR/DATETIMEフィールドがあるとすぐに、列自体の型を保持するのではなく、その型を返すようになります。選択されたレコードの種類を保持する方法があるかどうかは疑問でした。MySQLは、私はいくつかの入力に基づいて変化するフィールドを持つcase文
編集:キャストフィールドをintとしてCAST(id as INT)
が動作しませんでした ケースステートメントを順序通りに並べることはうまくいかなかった。
タイプを保ちますVARCHAR/DATETIMEフィールドがあるとすぐに、列自体の型を保持するのではなく、その型を返すようになります。選択されたレコードの種類を保持する方法があるかどうかは疑問でした。MySQLは、私はいくつかの入力に基づいて変化するフィールドを持つcase文
編集:キャストフィールドをintとしてCAST(id as INT)
が動作しませんでした ケースステートメントを順序通りに並べることはうまくいかなかった。
これ以上の研究とテストの結果、私はそれをやり直す方法を見つけることができました。
SELECT id, created_at, scomment
FROM test
ORDER BY
CASE 1 WHEN 1 THEN id END ASC,
CASE 1 WHEN 2 THEN created_at END ASC,
CASE 1 WHEN 3 THEN scomment END ASC;
これにより、特定のフィールドを正しく並べ替えることができます。 あなたも、次の操作を行って、異なる方向を追加することができます。
p_order_byは、ソートしたい番号フィールドがあり、そしてp_dirは方向であるSELECT id, created_at, scomment
FROM test
ORDER BY
CASE p_order_by WHEN 1 THEN AND p_dir = 'asc' id END ASC,
CASE p_order_by WHEN 1 THEN AND p_dir = 'desc' id END DESC,
CASE p_order_by WHEN 2 THEN AND p_dir = 'asc' created_at END ASC,
CASE p_order_by WHEN 2 THEN AND p_dir = 'desc' created_at END DESC,
CASE p_order_by WHEN 3 THEN AND p_dir = 'asc' scomment END ASC,
CASE p_order_by WHEN 3 THEN AND p_dir = 'desc' scomment END DESC;
。
私はこのソリューションでは、かなりではないと思うが動作するはずです。
その上に順序であなたの各フィールドの新しい列を作成します。
SELECT CASE 1
WHEN 1 THEN id
WHEN 2 THEN created_at
WHEN 3 THEN scomment
END as field_name
FROM (
SELECT I.id, I.rid,
C.created_at, C.rcreated_at,
S.scomment, S.rscomment
FROM (
SELECT t.id,
@rowid := @rowid + 1 AS rid
FROM test t,
(SELECT @rowid := 0) r
ORDER BY t.id
) I -- add sort column for id
JOIN (
SELECT t.id, created_at,
@rowcreated_at := @rowcreated_at + 1 AS rcreated_at
FROM test t,
(SELECT @rowcreated_at := 0) r
ORDER BY t.created_at
) C -- add sort column for created_at
ON I.id = C.id
JOIN (
SELECT t.id, scomment,
@rowscomment := @rowscomment + 1 AS rscomment
FROM test t,
(SELECT @rowscomment := 0) r
ORDER BY t.scomment
) S -- add sort column for scomment
ON I.id = S.id
) T
ORDER BY CASE 1
WHEN 1 THEN rid
WHEN 2 THEN rcreated_at
WHEN 3 THEN rscomment
END
私はフィドル –
あなたはそのクエリが機能すると言うでしょうか?しかし、別のデータ型を返す?あなたは通常、異なるデータ型を持つ 'CASE'を持っていないからです。しかし、これはMySQLですので、奇妙なことを驚かせることはありません。 –
クエリ自体は機能しますが、正しくは順序付けされません。そして、はい、mysqlは奇妙なことをします。 – RMT
sqlFiddleで作業サンプルを準備できますか? –