SELECT из двух таблиц, сравнение и вывод

  • Автор темы Автор темы timasik
  • Дата начала Дата начала

timasik

Новичок
SELECT из двух таблиц, сравнение и вывод

Здраствуйте, суть такова:
есть две таблицы kont и mess, в kont записаны номера ид пользователей по принадлежности к папкам, типа такого:

CREATE TABLE `kont` (
`id` int(16) NOT NULL auto_increment,
`user` int(7) default NULL, // номер пользователя
`komu` int(7) default NULL, // адресат
`fol` char(3) NOT NULL default 'a', // папка типа a,b,c,d или e
`dtm` int(15) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=100 ;

втроя таблица mess это типа сообщения пользователей:

CREATE TABLE `mess` (
`id` int(16) NOT NULL auto_increment,
`new` int(1) NOT NULL default '1', // типа новое, после публикации изменяет значение на 2
`kto` int(7) default NULL, // номер отправителя
`komu` int(7) default NULL, // номер получателя
`txt` text,
`dtm` int(15) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=100 ;

Задача: при просмотре одной из папок (например A) вывести уникальные номера пользователей из контаткного листа (типа кому я написал) принадлежащих этой папке, также номера из таблицы сообщений (те кто мне написали), при этом исключить совпадение номеров (типа контакт то один), сортировать всё по ORDER BY mess.new ASC типа пользователи имеющие непрочитанные мною сообщения были первыми...
 
И в чём проблема?

Вы же сами уже алгоритм написали — чего реализовать не получилось?
 
Re: SELECT из двух таблиц, сравнение и вывод

Автор оригинала: timasik
Задача: при просмотре одной из папок (например A) вывести уникальные номера пользователей из контаткного листа (типа кому я написал) принадлежащих этой папке, также номера из таблицы сообщений (те кто мне написали), при этом исключить совпадение номеров (типа контакт то один), сортировать всё по ORDER BY mess.new ASC типа пользователи имеющие непрочитанные мною сообщения были первыми...
просто переведи свои слова в язык запросов и получится решение :))
 
baev не хватает знаний.... вот что я пытаюсь и что получается:

$qwe = "SELECT DISTINCT kont.komu FROM kont,mess WHERE kont.fol = '".$folder."' AND mess.kto = ".$us['id']." AND mess.komu != kont.user ORDER BY mess.new ASC Limit 10

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

-~{}~ 24.07.07 08:30:

ранее я делал так: выводил сначала всех кто прислал сообщения и они помечены новыми (mess.new=1) затем проверял по kont.komu принадлежность к папке kont.fol а потом уже выводил всех остальных...

но получалось два массиивва а мне нужен один, что постраничный вывод нормальный сделать

-~{}~ 24.07.07 12:57:

Beavis
если бы я это мог сделать - думаешь спросил бы?
 
для многотабличной выборки лучше писать не "FROM kont,mess" а FROM kont JOIN mess USING(`id`)
id - поле, связывающее 2 таблицы

сначала напиши такой запрос даже без WHERE, а потом потихоньку добавляй условия и проверяй правильность выводящихся данных.. в итоге сам составишь сложный запрос... (хотя на самом деле он асолютно не сложный)
 
Beavis
огромное спасибо, буду пробовать

-~{}~ 24.07.07 14:16:

Beavis
скажи а если мне нужно выбрать в одной поле komu а в другой kto и получить из них массив уникальных номеров...

что из этого сделать полем связывающим таблицы?
 
Beavis
спасибо, ты не мог бы кинуть ссылку на документ или статью где описывается что такое ON, JOIN , вообщем подробное описание SQl запросов?
по приведённому примеру пока что мучаюсь, ищу... но нашёл только вывод всех кто мне написал и кому я написал, даже меня самого выводит!!! странно

-~{}~ 24.07.07 17:13:

PHP:
$qwe = "SELECT DISTINCT kont.komu FROM kont,mess WHERE kont.fol = '".$folder."' AND kont.user = ".$us['id']." AND ( mess.kto = kont.komu OR mess.kto = ".$us['id']." AND mess.komu = kont.komu) ORDER BY mess.new LIMIT 10;";

работаёт чётко по папке, и те кому написано и те от кого пришло, но не сортирует по новым сообщениям... что делать?

-~{}~ 24.07.07 18:04:

вообщем так и не понял что и как, решил проблемму дополнительными двумя массивами в цикле и последующим объединением... но изучить постараюсь этот вопрос досконально... Спасибо за помощь, много узнал нового....
 
timasik
в интернете я не искал литературу по этому вопросу... пользуюсь бумажной...
а если б ты подробно описал структуру БД и подробно что ты хочешь - запрос бы я тебе составил... в том что ты привел выше я даже внешнего ключа не вижу
 
alpine
спасибо

Beavis
да уже вроде работает как есть. бог с ним...
Спасибо тебе громадное...

я пытаюсь сделать сайт знакомств www.webrostov.net так вот в разделе мои сообщения там как на мамбе папки, в которых пользователи с которыми пользователь общается, ... если будет желание зайди, зарегистрируйся и посмотри как это... но вообще-то один к одному с мамбой (love.mail.ru) за исключением что у меня лучше :) ...
я пытался сейчас описать связь таблиц как это вижу я, но похоже получится роман... поэтому не стал... но если интересует то напишу...
 
Сверху