web-dev-qa-db-fra.com

la plus grande fonction () renvoie la propriété non définie

J'utilise la fonction mysql GREATEST () () pour comparer deux champs de table et afficher en boucle l'un ou l'autre avec la valeur entière la plus élevée. Les 2 champs sont constitués des scores de vote pour les messages: UP ou 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

}

Ensuite, dans ma boucle, j'appelle la fonction mais je récupère Notice: Undefined property: stdClass::$up pour

echo $results->up;

et le même avis pour down. Je ne suis pas sûr de ce que je fais mal ici.

1
wpStudent

Je pense que vous voulez utiliser get_var(), pas get_row() - en consultant la documentation , le nom GREATESTde MySQL ne renvoie qu'une valeur unique.

$results sera alors juste la valeur du plus grand (que ce soit upou downname__).

Si vous voulez le plus grand up et le plus grand downname__, utilisez;

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

Accepter avec TheDeadMedic ... Si vous utilisez GREATEST (), veuillez vous rendre service en sachant ce que vous faites. Il retourne un bigint lorsqu'il est alimenté, et votre requête ne donne aucun nom à la colonne résultante. Donc, $ wpdb va évidemment se plaindre lorsque vous essayez d'accéder à une colonne qui n'est pas disponible. :-)

Je crois que vous cherchez ceci:

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