Сортировка в выборке по двум таблицам

Статус
Закрыто для дальнейших ответов.

v0rbis

selfcoded
Регистрация
02.05.2005
Сообщения
923
суть вопроса:

есть таблица prod_rank. в ней есть поля r1,r2,r3,r4,r5. которые хранят кол-во голосов на соотв кол-во баллов (r1- на единицу .. r5-на пять баллов).

и есть таблица cms_block_doc_store_docs75. в которой храняться данные на организации\предприятия.

необходимо сварганить такой запрос, чтобы вывод организаций был по рейтингу... и вот тут то проблема :(

SELECT *,MAX(r1,r2,r3,r4,r5) AS range FROM cms_block_doc_store_docs75,prod_rank ORDER BY range DESC

неканает :( сортирует - но совсем не так... подскажите мне решение :)
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
А связи в таблицах прописаны или ты забыл WHERE написать?
И мне казалось что у max такой синтаксис MAX(expr)
А тебе вроде надо было что-нить типо
Код:
SELECT *,(r1+r2+r3+r4+r5) AS range...
или описывать IF'ом все варианты по аналогии с
Код:
SELECT *,IF(r1>r2,IF(r1>r3,r1,r3),IF(r2>r3,r2,r3)) AS range FROM test
 

v0rbis

selfcoded
Регистрация
02.05.2005
Сообщения
923
WHERE есть.. но тут не в этом суть

зачем мне r1+r2+r3+r4+r5 ? мне надо чтобы не суммой, а значениями в позициях
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
А второй вариант так?
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
попробуй вместо
Код:
ORDER BY range DESC
Код:
GROUP BY `range` DESC
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
2deMone, групировка тут не причем.
2v0rbis: кинь сюда частичную структуру этих 2-х таблиц и пару тройку сторок данных, тогда и разговор будет:)
А то что есть сейчас - это гадание на кофейной гуще.
 

v0rbis

selfcoded
Регистрация
02.05.2005
Сообщения
923
таблицы

Код:
CREATE TABLE cms_block_doc_store_docs75 (
  id int(11) NOT NULL auto_increment,
  department int(11) default NULL,
  reg_number varchar(64) binary default NULL,
  doc_name varchar(255) binary default NULL,
  confirm_person int(11) default NULL,
  modified timestamp(14) NOT NULL,
  created timestamp(14) NOT NULL default '00000000000000',
  confirm_date timestamp(14) NOT NULL default '00000000000000',
  viewed int(1) default NULL,
  file_name varchar(255) binary default NULL,
  modifier int(11) default NULL,
  dep_creator int(11) default NULL,
  creator int(11) default NULL,
  description text,
  adress varchar(255) binary default NULL,
  phone varchar(255) binary default NULL,
  title varchar(255) binary NOT NULL default '',
  email varchar(255) binary default NULL,
  author varchar(255) binary NOT NULL default '',
  icq varchar(255) binary default NULL,
  store int(11) default NULL,
  rank int(11) default NULL,
  status int(1) default '1',
  www varchar(255) binary NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY 2main (www)
) TYPE=MyISAM;


CREATE TABLE prod_rank (
  id int(11) NOT NULL auto_increment,
  prod int(11) NOT NULL default '0',
  r1 int(11) NOT NULL default '0',
  r2 int(11) NOT NULL default '0',
  r3 int(11) NOT NULL default '0',
  r4 int(11) NOT NULL default '0',
  r5 int(11) NOT NULL default '0',
  PRIMARY KEY  (id),
  UNIQUE KEY prod (prod)
) TYPE=MyISAM;
в первой таблице - организации. поле store - идентификатор раздела каталога, он не суть важен.
во второй таблице - пять полей = количество голосов на соотв рейтинг. поле prod == id.организации

prod_rank VALUES (2, 161, 0, 0, 2, 0, 1); - означает организацию с id=161 и 1 голосом на 5 баллов и 2 голоса на 3 балла. итого 3 голоса с преобладанием на отметку 3.


дописано пожжже:

все.... времени нету совсем - поэтому использован "ненашметод" : добавил в основную таблицу окромя старых еще поле с результирующим рейтингом...
 
Статус
Закрыто для дальнейших ответов.
Верх Низ