web-dev-qa-db-ja.com

greatest()関数が未定義のプロパティを返す

Mysql GREATEST() 関数を使用して、2つのテーブルフィールドを比較し、最大の整数値を持つフィールドをループで表示します。 2つのフィールドは投稿に対する投票スコアで構成されています:UPまたはDOWN。

function vote_results($post_id) { 
  global $wpdb; 
  $table = $wpdb->prefix . "post_votes";    
  $results = $wpdb->get_row( "SELECT GREATEST (up, down) FROM $table WHERE voted_post_id = $post_id" );
  echo $results->up; //echo if highest value
  echo $results->down; //echo if highest value

}

それから私のループで私は関数を呼び出しますが、Notice: Undefined property: stdClass::$upを取得します

echo $results->up;

downについても同じことが言えます。ここで何が悪いのかわからない。

1
wpStudent

get_var()ではなくget_row()を使いたいと思います - ドキュメントを見ると、MySQLのGREATESTはただ一つの値を返します。

$resultsはちょうど最大の値になります(upでもdownでも)。

最大のup最大のdownが必要な場合は、を使用します。

$wpdb->get_row("SELECT GREATEST(up) AS 'up', GREATEST(down) AS 'down' ...")
4
TheDeadMedic

TheDeadMedicに同意する... GREATEST()を使用する場合は、自分が何をしているのか知っていることで自分自身を支持してください。入力されたint値はbigintを返します。クエリでは結果の列に名前は付けられません。あなたが利用できないカラムにアクセスしようとすると、$ wpdbは明らかに文句を言うでしょう。 :-)

私はあなたがこれを探していると思います:

SELECT up - down as total, up, down FROM $table WHERE voted_post_id = $post_id
1