私は2つのテーブルを持っています - 1つはフォームに関するメタデータを含み、もう1つはフィールド自体を含んでいます。メタデータテーブルには、どのフィールドが最初に表示されるかを選択するオプションがあり、フィールドテーブル内に残りのフィールドの順序を表示する順序欄があります。MySQLは、結合からのフィールド値で1回、次に結合されていない列で
クエリを並べ替えることができるようにする必要があります。これにより、結合されたメタデータフィールドの値が最初に表示され、次に順序付けされた列が表示されるようになります。例えば
:
forms
id sort_field
1 6
2 0
form_fields
id form_id name ordering
1 2 field1 1
2 2 field2 3
3 2 field3 2
4 1 fielda 3
5 1 fieldd 2
6 1 fieldc 4
7 1 fieldb 1
私の現在のクエリは次のとおりです。
select ff.name
from form_fields ff
left join forms f on ff.form_id=f.id
order by f.sort_field DESC, ff.ordering ASC
それはフォーム内の任意の並べ替えを持っていないので、これはフォーム2のために働く - それは、フォーム1のために動作しません。 joinを使用すると、sorting_fieldは常に6なので、sorting_fieldに値がないかのようにソートされます。
フォーム1のための私の所望の出力は次のようになります。
fieldc
fieldb
fieldd
fielda
、それが設定されている場合は、一度効果でsort_fieldでソートすることができ、その後、通常のように、残りの注文分野で?
あなたの最初のデータが逆転しました(フォームのフィールドはフォームフィールドにあってはならず、その逆もあります)ので、変更する必要がありますが、 – bhttoan