MySQL запрос стал диким? - PullRequest
       9

MySQL запрос стал диким?

3 голосов
/ 05 октября 2009

Может кто-нибудь сказать мне, почему происходит следующее, и как это исправить?

У меня есть запрос MySQL с предложением ORDER BY, который выглядит следующим образом ..

ORDER BY (did_voteup-did_votedown) DESC, did_voteup DESC

Так что следует упорядочить результаты по их «эффективному» рейтингу, как в ..

1st. 10 up - 1 down = 9 effective
2nd. 10 up - 5 down = 5 effective
3rd. 10 up - 7 down = 3 effective

Однако, как вы можете видеть на моей странице здесь , он неправильно их упорядочивает и дает мне это ..

1st. 1 up - 3 down = -2 effective
2nd. 16 up - 6 down = 10 effective
3rd. 15 up - 5 down = 10 effective

Очевидно, что эта строка 1-го места не должна быть там.


Подробнее ...

CREATE TABLE dictionary_definitions (
  did_id int(11) unsigned NOT NULL auto_increment,
  did_wordid int(11) unsigned NOT NULL default '0',
  did_userid int(11) unsigned NOT NULL default '0',
  did_status tinyint(1) unsigned NOT NULL default '0',
  did_date int(11) NOT NULL default '0',
  did_definition text,
  did_example text,
  did_votecheck int(11) NOT NULL default '0',
  did_voteup smallint(5) unsigned NOT NULL default '0',
  did_votedown smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY (did_id),
  KEY (did_wordid),
  KEY (did_userid)
) ENGINE=MyISAM;

SELECT a.did_id, a.did_userid, a.did_definition, a.did_example, 
    a.did_votecheck, a.did_voteup, a.did_votedown, b.user_name, b.user_extra8 
FROM dictionary_definitions AS a LEFT JOIN users AS b ON a.did_userid=b.user_id 
WHERE did_wordid=4 
ORDER BY (did_voteup-did_votedown) DESC, did_voteup DESC LIMIT 0, 5

1 Ответ

9 голосов
/ 05 октября 2009

Это известная проблема, связанная с вычитанием целых чисел без знака .

Вычитание между целочисленными значениями, где одно имеет тип UNSIGNED, приводит к беззнаковому результат по умолчанию. Если результат в противном случае был бы отрицательным, он становится максимальное целочисленное значение. Если режим NO_UNSIGNED_SUBTRACTION SQL включен, результат отрицательный.

Ссылка: Числовые типы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...