запрос на сортировку из двух таблиц

kabachok

Новичок
запрос на сортировку из двух таблиц

есть 2 таблицы, в первой хранятся сообщения, во второй список контактов.

PHP:
CREATE TABLE `sas_msg` (
  `id` int(11) NOT NULL auto_increment,
  `to` int(6) unsigned NOT NULL,
  `from` int(6) unsigned NOT NULL,
  `text` char(255) NOT NULL,
  `data` int(11) unsigned NOT NULL,
  `status` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `to` (`to`),
  KEY `status` (`status`)
) ENGINE=MyISAM;

CREATE TABLE `sas_cnt` (
  `id` int(11) NOT NULL auto_increment,
  `id_us` smallint(6) unsigned NOT NULL default '0',
  `id_cnt` smallint(6) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
мне нада отсортирокать контакты таким образом чтобы если в первой таблице имеется сообщение со staus=1 (новое) то контакт выводился в начале списка
`id_cnt` это id контакта
`from` это сообщение от контакта `id_cnt`
возможно это сделать одним запросом (или вообще как нибудь), или мне яду лучше выпить?
 

kabachok

Новичок
Спасибо Светлана, только вы далеко неуходите, у меня щас куча вопросов родится =)

-~{}~ 11.03.06 17:35:

получилось вот что

PHP:
SELECT sas_cnt . * 
FROM sas_cnt
LEFT JOIN sas_msg ON sas_cnt.id_cnt = sas_msg.from
WHERE sas_msg.status =1 order by sas_cnt.id;
не получается у меня сгрупировать и отсортировать нормально
 

kabachok

Новичок
чето не пашет совсем,и я запутался

-~{}~ 11.03.06 17:53:

SELECT sas_cnt . *
FROM sas_cnt
LEFT JOIN sas_msg ON sas_cnt.id_cnt = sas_msg.from
WHERE sas_msg.status =1 group by sas_cnt.id;
вот это работает почти как надо, за исключением того что мне надо чтобы контакты со статусом 1 были вверху списка, но и остальные контакты тоже нада вывести, помогите =(
 

svetasmirnova

маленький монстрик
>но и остальные контакты тоже нада вывести
тогда WHERE sas_msg.status =1 зачем тебе?
 

kabachok

Новичок
Ура! дотюхал!
SELECT sas_cnt. *
FROM sas_cnt
LEFT JOIN sas_msg ON sas_cnt.id_cnt = sas_msg.from
GROUP BY sas_cnt.id
ORDER BY sas_msg.status DESC ;

спасибо Светлана за наводку

-~{}~ 11.03.06 18:32:

у меня последний вопрос и я отстану

SELECT sas_cnt. * , count( sas_msg.status =1 )
FROM sas_cnt
LEFT JOIN sas_msg ON sas_cnt.id_cnt = sas_msg.from
GROUP BY sas_cnt.id
ORDER BY sas_msg.status && sas_cnt.login DESC ;
получаем
id id_us id_cnt login count( sas_msg.status =1 )
2 1 3 glide 3
3 1 7 do1phin 1
4 1 821 yohanga 0
5 1 499 rulez 0
1 1 532 7alamandra 0

вот
а как сделать чтобы последние три записи сортировались по возростанию login?
 

svetasmirnova

маленький монстрик
Если *все записи* сортировать сначала по статусу, потом по логину, то просто:
ORDER BY sas_msg.status DESC, sas_cnt.login ASC ;
Если только последние нужно, то в поиск: не тривиально, но было.
 

kabachok

Новичок
SELECT sas_cnt. * , count( sas_msg.status =1 )
FROM sas_cnt
LEFT JOIN sas_msg ON sas_cnt.id_cnt = sas_msg.from
GROUP BY sas_cnt.id
ORDER BY sas_msg.status DESC , sas_cnt.login ASC ;
остановлюсь на таком варианте
выводит
id id_us id_cnt login count( sas_msg.status =1 )
3 1 7 do1phin 1
2 1 3 glide 3
1 1 532 7alamandra 0
5 1 499 rulez 0
4 1 821 yohanga 0
почти то что надо :)
 
Сверху