SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.11.2010 13:34:24

tester5434
Участник
Зарегистрирован: 14.11.2010
Сообщений: 3

вывод из нескольких таблиц

create table chat (
                        id int auto_increment, login char(16) not null,
                        color char(12), message text not null,
                        date char(16) not null, recipient char(12), 
                        primary key(id)
                        ) CHARACTER SET=utf8

create table online(
                        id int auto_increment, login char(16) not null,
                        color_login char(12),
                        time int(2) not null,
                        sex int(1) not null,
                        primary key(id)
                       )

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

SELECT DISTINCT chat.*, online.color_login FROM chat, online WHERE chat.login IN (SELECT chat.login FROM chat)

Неактивен

 

#2 14.11.2010 15:35:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: вывод из нескольких таблиц

FROM chat, online WHERE chat.login = online.login

Но только лучше хранить не имя человека, а id из таблички online.
Предваряя вопрос «а когда он выйдет из чата id исчезнет» — когда
он выйдет из чата, цвет тоже исчезнет вместе с id.

Неактивен

 

#3 15.11.2010 02:07:59

tester5434
Участник
Зарегистрирован: 14.11.2010
Сообщений: 3

Re: вывод из нескольких таблиц

SELECT DISTINCT chat.*, online.color_login FROM chat, online WHERE chat.login = online.login

Этот вариант я пробовал.... проблема в том что сообщения пользователей которые вышли(их нет в табличке online) не видны..
почему Mysql не разрешает сделать вот так:  SELECT DISTINCT chat.*, DISTINCT online.color_login

я слабо соображаю в mysql но мне очень нужно это доделать.....

Отредактированно tester5434 (15.11.2010 02:08:59)

Неактивен

 

#4 15.11.2010 14:01:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: вывод из нескольких таблиц

Представьте, что у Вас есть класс. Вы хотите на родительском собрании объявить
результаты последней контрольной. В Вашей реализации — Вы берете дневники
учеников и начинаете зачитывать оценки. Один ученик не отдал Вам дневник —
и поэтому его оценки Вы не видите. Решение проблемы: нужен журнал, в котором
Вы бы дублировали оценки smile

Неактивен

 

#5 16.11.2010 21:24:24

tester5434
Участник
Зарегистрирован: 14.11.2010
Сообщений: 3

Re: вывод из нескольких таблиц

можно пример в виде sql запроса?)

Неактивен

 

#6 16.11.2010 23:08:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: вывод из нескольких таблиц

CREATE TABLE chat (ts TIMESTAMP, line VARCHAR(500), INDEX(ts));

ts — дата сообщения, в line хранится отформатированная строка для вывода. Цвет
и пользователь уже зашиты внутри строки.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson