[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу составить архитектуру (или запрос)
Страницы: 1, 2, 3, 4
Zzepish
Пишу админку.
есть таблица users_channels: channel_id|starter|destination_user.
starter и destination_user: id юзера начавшего, и адресата соответственно.
есть таблица users : id|nick.
Так вот- как мне в один запрос соединить, чтоб я мог выбрать ники и стартера, и адресата?
$channel['starter_nick'].' '.$channel['destination_user_nick']
Игорь_Vasinsky
почитайте про JOIN - поможет сделать запрос в 2 и более таблицы

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
не вариант.
Игорь_Vasinsky
да ну))

users_channels: channel_id|starter|destination_user
users : id|nick

попробуй

SELECT * FROM `users_channels` `uc` RIGTH JOIN `users` `u` ON `uc`.`starter` = `u`.`id` AND `us`.`destination_user` = `u`.`id`




_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
не не - этот запрос кривой. сек. поколдую

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Да уже не надо (но если напишешь- буду благодарен и намотаю на ус)
Игорь_Vasinsky
SELECT u . * , uc . * 
FROM `users_channels` `uc`
LEFT JOIN `users` `u` ON `uc`.`starter` = `u`.`id`
OR `uc`.`destination_user` = `u`.`id`


Вернул

id	nick	channel_id	starter	destination_user
1 user1 1 1 2
2 user2 1 1 2
3 user3 2 3 4
4 user4 2 3 4
5 user5 3 5 6
6 user6 3 5 6
7 user7 4 7 8
8 user8 4 7 8
9 user9 5 9 10
10 user10 5 9 10


как видно - получено всё что нужно, тока из-за того что в беседе 2 человека - то и по channel_id - по 2 строки



таблица каналов

channel_id	starter	destination_user
1 1 2
2 3 4
3 5 6
4 7 8
5 9 10


таблица юзеров

	id	nick
1 user1
2 user2
3 user3
4 user4
5 user5
6 user6
7 user7
8 user8
9 user9
10 user10


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
т.е. при while - можно лекго собрать нужный ассоциативный массив

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
ПОнимаешь в чем беда- у меня выдает поля с NULL (хотя их вообще не должно там быть)
Игорь_Vasinsky
дай дамп обоих таблиц

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky

-- Структура таблицы `user_channels`
--

CREATE TABLE IF NOT EXISTS `user_channels` (
`channel_id` int(11) NOT NULL AUTO_INCREMENT,
`starter` int(11) NOT NULL,
`destination_user` int(11) NOT NULL,
PRIMARY KEY (`channel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `user_channels`
--

INSERT INTO `user_channels` (`channel_id`, `starter`, `destination_user`) VALUES
(2, 5, 1),
(3, 6, 1);




-- Структура таблицы `chat`
--

CREATE TABLE IF NOT EXISTS `chat` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sender_id` int(11) NOT NULL,
`who` varchar(255) NOT NULL,
`to` varchar(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`channel` varchar(255) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;

--
-- Дамп данных таблицы `chat`
--

INSERT INTO `chat` (`id`, `sender_id`, `who`, `to`, `date`, `channel`, `text`) VALUES
(40, 1, 'Zzepish', '', '2013-01-18 16:07:40', '2', 'ggdggfgddf');

Игорь_Vasinsky
а users?

и почему у тя в таблице chat 1 строка в которой `to` - пусто?

уточни условие для этих таблиц

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
SELECT * 
FROM `user_channels` `uc`
LEFT JOIN `chat` `c` ON `uc`.`channel_id` = `c`.`channel`
WHERE `c`.`channel` IS NOT NULL


channel_id	starter	destination_user	id	sender_id	who	to	date	channel	text
2 5 1 40 1 Zzepish 2013-01-18 16:07:40 2 ggdggfgddf


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
to я вообще удалю! она не нужна
Игорь_Vasinsky
вообще не понятно в chat есть sender_id и who

и почёму получатель to у тя пуст?

что то мне структура не больно нравиться.

почему myisam, а не innodb ?

там есть foregain key - можно завязать channel_id и channel

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.