Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть задача: Вывести людей по приоритету (Coefficient). Условия (where (1_time_incall=30 AND 1_unit_incall =1) OR (2_time_incall=30 AND 2_unit_incall =1) OR (3_time_incall=30 AND 3_unit_incall =1) OR (4_time_incall=30 AND 4_unit_incall =1) ). Или что то вроде того. Главное найти пару time_incall=30 AND unit_incall=1 и упорядочить все по amount_incall. У кого приоритета выводить по убывание или возрастанию в колонках (incall_amount). Вот картинки что было до и что нужно после . Помогите пожалуйста. Спасибо
до : http://s46.radikal.ru/i113/1106/45/9695171afdfa.gif
после: http://s60.radikal.ru/i168/1106/6a/d731e38bbdb3.gif
Неактивен
вторую и третью строку перепутал
Неактивен
ORDER BY Coefficient DESC, 1_amount_incall DESC ?
Неактивен
Надо учитывать остальные поля (2_amount_incall,3_amount_incall,4_amount_incall) при сортировки по каждому Coefficient (1,2,3 ...) . В том то и соль вся .
SELECT prefix_user.user_id, prefix_user.Coefficient ,prefix_user.user_login,prefix_user.1_amount_incall,prefix_user.2_amount_incall,prefix_user.3_amount_incall,prefix_user.4_amount_incall FROM ( SELECT user_id, Coefficient , user_login,1_amount_incall,2_amount_incall,3_amount_incall,4_amount_incall FROM prefix_user WHERE ( (1_time_incall=30 AND 1_unit_incall =1) OR (2_time_incall=30 AND 2_unit_incall =1) OR (3_time_incall=30 AND 3_unit_incall =1) OR (4_time_incall=30 AND 4_unit_incall =1) ) order by rand() ) prefix_user ORDER BY prefix_user.Coefficient DESC,prefix_user.1_amount_incall,prefix_user.2_amount_incall,prefix_user.3_amount_incall,prefix_user.4_amount_incall desc LIMIT 20
Пока наваял так. но тут видно что он не только по каждому Coefficient , но и по каждому amount_incall сортирует, а нужно по всем четверым
http://s003.radikal.ru/i204/1106/71/9e1894a504de.gif
Неактивен
ORDER BY Coefficient, GREATEST(amount1, amount2, ...). Но лучше нормализовать данные.
Неактивен
К сожалению все также по каждому полю в отделности пока сортирует
SELECT prefix_user.user_id, prefix_user.Coefficient,prefix_user.user_login,prefix_user.1_amount_incall,prefix_user.2_amount_incall,prefix_user.3_amount_incall,prefix_user.4_amount_incall FROM ( SELECT user_id, Coefficient , user_login,1_amount_incall,2_amount_incall,3_amount_incall,4_amount_incall FROM prefix_user WHERE ( (1_time_incall=30 AND 1_unit_incall =1) OR (2_time_incall=30 AND 2_unit_incall =1) OR (3_time_incall=30 AND 3_unit_incall =1) OR (4_time_incall=30 AND 4_unit_incall =1) ) ) prefix_user ORDER BY prefix_user.Coefficient desc ,greatest(prefix_user.1_amount_incall,prefix_user.2_amount_incall,prefix_user.3_amount_incall,prefix_user.4_amount_incall) desc LIMIT 20
http://s08.radikal.ru/i181/1106/a5/f5334eccd717.gif
это вы про бритву?
Отредактированно evgeniy123 (18.06.2011 21:53:36)
Неактивен
Нет, это я про нормализацию. Нужно все однотипные данные хранить в одном столбце,
тогда проблем не будет с написанием запросов.
Неактивен
Может предложете как вы сделали бы ?
Неактивен
CREATE TABLE tablename (user_id INT, Coefficient INT, user_login VARCHAR(20), amount_incall INT);
Неактивен
Так было сделано чтобы узнавать по деньгам за какой период сколько стоит человек. периодов 4 как видите. Как же я в 1 ячейку умещу 4 значения что бы потом сравнивать через mysql ?
Неактивен
Добавьте еще столбец period и вводите четыре строки вместо одной?
Неактивен
Страниц: 1