2

EAVテーブルを保存しようとしていますが、動作させることができません。結果は得られますが、並べ替えることができません。

これは私の質問です:

SELECT
    formFields.uid,
    formFields.formId,
    formFields.postId,
    formFields.name,
    formFields.value
FROM formFields
INNER JOIN formFields aux
    ON (aux.name = "date")
WHERE
    formFields.formId = "1789"
    AND formFields.deleted = 0
    AND formFields.hidden = 0
ORDER BY aux.value DESC

これは表です:

uid formId  postId  name    value
1   1789    1   title   example title #1
2   1789    1   date    1341091600
3   1789    2   title   example title #2
4   1789    2   date    1341092300
5   1789    3   title   example title #3
6   1789    3   date    1341081200

そして、これは私が必要とする結果です:

uid formId  postId  name    value
3   1789    2   title   example title #2
4   1789    2   date    1341092300
1   1789    1   title   example title #1
2   1789    1   date    1341091600
5   1789    3   title   example title #3
6   1789    3   date    1341081200

結果は、名前列に日付がある値でソートされます
(値は単なる例です)

編集:ここにsqlfiddleがあります:http ://sqlfiddle.com/#!2 / 0d3c32 / 2

4

3 に答える 3

2

この質問でさえ素晴らしい古い質問です。EAVでデータの並べ替えを実行する方法について、ここで正確な答えを維持したいと思います。

元の質問の期待を達成するために、次のSQLを使用して指定された列を並べ替えることができます。

SELECT mdata.uid, mdata.formId, mdata.postId, mdata.name, mdata.value
FROM formFields mdata
WHERE mdata.formId = '1789'
    AND mdata.deleted = 0
    AND mdata.hidden = 0
ORDER BY (
    SELECT s.value FROM formFields s 
    WHERE s.name='date' 
    AND s.postId=mdata.postId
) DESC

上記のSQLは、次の結果を生成します。

uid formId  postId  name    value
3   1789    2   title   example title #2
4   1789    2   date    1341092300
1   1789    1   title   example title #1
2   1789    1   date    1341091600
5   1789    3   title   example title #3
6   1789    3   date    1341081200

この回答がお役に立てば幸いです。

于 2018-05-23T07:13:55.847 に答える
1

値が必要な場合はORDER BY、次のdateようなものを使用できます。

SELECT
  formFields.uid,
  formFields.formId,
  formFields.postId,
  formFields.name,
  formFields.value 
  FROM formFields
INNER JOIN formFields aux 
  ON (aux.name = "date")
WHERE formFields.formId = "1789"
  AND formFields.deleted = 0
  AND formFields.hidden = 0
ORDER BY case when formFields.name = 'date' then 0 else 1 end 

SQL FiddlewithDemoを参照してください

于 2012-10-15T11:32:40.220 に答える
0
 SELECT     formFields.uid,     
      formFields.formId,     
      formFields.postId, 
      formFields.name,
     formFields.value 
 FROM formFields tx_gcgluteusfeed_formFields 
 INNER JOIN formFields b  
      ON formFields.postId = b.postId 
 INNER JOIN formFields c 
      ON (c.name = "date")  
 WHERE  ormFields.formId = "1789" 
      AND formFields.deleted = 0 
      AND formFields.hidden = 0 
 ORDER BY 1 DESC

最初の列で注文したい場合

于 2012-10-15T10:06:18.987 に答える