2017-09-03 5 views
2

私は約1ヶ月間この問題に苦しんでいます.. 多くの投稿を検索して読んでいますが、基本的にはMySQLのORDER BY "count(*)と他の2つのパラメータ"は別のテーブルから

...この作品を作る:私は2つのデータベーステーブルfun_postsfun_post_upvotesを持って、私はこれは私の最新のコードは、それが動作しませんされて

SELECT * 
FROM fun_posts 
ORDER BY (HOTTEST POSTS(MOST UPVOTED THIS WEEK)) 

にしたい

SELECT * 
FROM fun_posts 
ORDER BY (SELECT count(*), image_id, date 
      FROM fun_post_upvotes 
      GROUP BY image_id 
      ORDER BY DATE(date) > (NOW() - INTERVAL 7 DAY) DESC, 
        count(*) DESC, 
        date DESC) 

この行を2つの異なる関数SELECTに分割すると、それらは機能します。私は単純な投稿を選択することができ、私は望むようにupvotes数を選択することができます。

しかし、私はそのような1行にそれらを作る場合、私は次のエラーを取得:

#1241 - Operand should contain 1 column(s)

EDITのNR 1:

fun_postsテーブル Image fun_post_upvotesテーブル Image

を私がチェックした回答の問題:

ここでは、select機能で投稿がどのように注文されるかを見ています。与えられたコードを有する10-> 134-> 132-> 2-> 13

Image

そしてここで(それは、画像を選択し、なく、その順序で)、(Iしたいようにそれは選択します)10-> 122- > 39-> 8> 110あなたはこの

SELECT fp.*, fpu.`cnt` 
FROM fun_posts fp 
LEFT JOIN (SELECT image_id, COUNT(*) AS cnt 
     FROM fun_post_upvotes 
     WHERE `date` > (NOW() - INTERVAL 7 day) 
     GROUP BY image_id 
    ) fpu ON (fpu.image_id = fp.id) 
ORDER BY fpu.cnt DESC, fp.`date` DESC, fp.`id` DESC; 

を行うに参加することがimage_idはのANによってグループ化されたfun_post_upvotesからリストを選択して使用することができます

Image

+0

。 –

+0

@ Fred-ii-なぜですか?説明していただけますか?それから、今週はアップポートがない "投稿"は表示されません。そして、2つの別々のSELECTSに分割されるとき、彼らは働いています。 – Crelix

答えて

4

dは行の数を数えます。そのリストはメインクエリに返され、fp.idの(LEFT JOIN)と一致します。クエリでは、過去7日間に最も多くのアップフォースを含むアイテムが最初に表示されます。アップフォォートが見つからない場合でも、結果は返されますが、特定の順序ではなく下部に戻ります。

あなたはあなたが好きな順番で商品を入手するために、注文を編集することができます。ここでは、 `WHERE`句、および、JOIN有益であろう追加/使用する必要がsqlfiddle.com

+0

「fpu」とは何ですか?あなたはそれを間違っていましたか?それは "fp"である必要がありましたか? – Crelix

+0

fpuは、サブクエリの結果がクエリ内で認識される名前です。したがって、fun_portsの略語は 'fp'になり、結合されたテーブルの略語は' fpu'(別名fun_post_upvotesクエリの結果)になります – Jeffrey

+0

申し訳ありません、もっと手伝ってもらえますか?私は答えとしてチェックしたが、それは私のように動作しないことがわかった。 – Crelix

関連する問題