За последние 24 часа нас посетили 18600 программистов и 1667 роботов. Сейчас ищут 954 программиста ...

Сложный запрос для выборки

Тема в разделе "MySQL", создана пользователем newbie21, 8 дек 2012.

  1. newbie21

    newbie21 Активный пользователь

    С нами с:
    8 дек 2012
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, уважаемые форумчане.
    Возникла задача, я надеюсь на вашу помощь в её решении.

    Суть такова.Пишу скриптик личных сообщений. Есть две таблицы:

    Диалоги:
    Код (Text):
    1. mysql_query("CREATE TABLE IF NOT EXISTS dialogs (
    2.       id INT AUTO_INCREMENT,
    3.       pol_id INT(10),
    4.       pol_name CHAR(40),
    5.       pol_mail CHAR(50),
    6.       otp_id INT(10),
    7.       otp_name CHAR(40),
    8.       otp_mail CHAR(50),
    9.       tema CHAR(200),
    10.       date INT(25),
    11.       PRIMARY KEY(id)
    12.     )ENGINE=MyISAM CHARACTER SET=utf8;") Or die(mysql_error());
    pol_id, pol_name, pol_mail - ид пользователя получателя, его имя и емайл.
    otp_id, otp_name, otp_mail - ид пользователя отправителя сообщения, его имя и емайл.

    И сами сообщения:
    Код (Text):
    1. mysql_query("CREATE TABLE IF NOT EXISTS message (
    2.       id INT AUTO_INCREMENT,
    3.       uid INT(10),
    4.       ip CHAR(30),
    5.       tema TEXT,
    6.       text TEXT,
    7.       date CHAR(50),
    8.       nod INT,
    9.       otp_new INT,
    10.       pol_new INT,
    11.       PRIMARY KEY(id)
    12.     )ENGINE=MyISAM CHARACTER SET=utf8") Or die(mysql_error());
    pol_new, otp_new - индикатор нового сообщения для каждого из участников диалога.
    nod - ключ для привязки сообщения к одному из диалогов.

    Проблема заключается в следующем: не получается составить запрос с вложениями, что бы
    за один проход можно было сделать выборку диалогов и заодно посчитать во второй таблице
    сколько всего сообщений в диалоге и сколько непрочитанных и результат был такого вида:

    Далог1 - всего сообщений: *столько то*, новых: *столько то*
    Далог2 - всего сообщений: *столько то*, новых: *столько то*
    Далог3 - всего сообщений: *столько то*, новых: *столько то*

    Считать сколько новых по одному из индикаторов pol_new или otp_new, значение в них 1 или 0, просто всё зависит от того, кому показывается список.

    Пытался составить группировку запросов подсчёта, но выдаётся ошибка, что результатов больше одного. Надеюсь на помощь, заранее благодарю.
     
  2. tchk

    tchk Активный пользователь

    С нами с:
    8 дек 2012
    Сообщения:
    10
    Симпатии:
    0
    Читай "типы данных столбцов MYSQL" (DATE,DATETIME,CHAR,VARCHAR,INT,BIT...), переделывай таблицы...
    Зачем тебе в первой таблице id + имя + мейл двух пользователей (если пользователи зарегистрированы значит уже есть данные и достаточно только id пользователей)
    ps.
    Не претендуя на последнюю инстанцию я бы создавал 3 таблицы (если с нуля) users (данные пользователя) dialogs (тех.информация + тема) и body (собственно тело сообщения)
     
  3. newbie21

    newbie21 Активный пользователь

    С нами с:
    8 дек 2012
    Сообщения:
    2
    Симпатии:
    0
    Решил проблему самостоятельно. За совет спасибо, у меня все таблицы имеются. Тему можно закрыть. =)