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

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 типа пользователи имеющие непрочитанные мною сообщения были первыми...
 

baev

‹°°¬•
Команда форума
И в чём проблема?

Вы же сами уже алгоритм написали — чего реализовать не получилось?
 

Beavis

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

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

timasik

Новичок
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
если бы я это мог сделать - думаешь спросил бы?
 

Beavis

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

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

timasik

Новичок
Beavis
огромное спасибо, буду пробовать

-~{}~ 24.07.07 14:16:

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

что из этого сделать полем связывающим таблицы?
 

timasik

Новичок
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:

вообщем так и не понял что и как, решил проблемму дополнительными двумя массивами в цикле и последующим объединением... но изучить постараюсь этот вопрос досконально... Спасибо за помощь, много узнал нового....
 

Beavis

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

timasik

Новичок
alpine
спасибо

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

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