ФорумРазработкаБазы данных → Помогите составить запрос

Помогите составить запрос

  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 5, 2011, 10:41 п.п.

    что ты вообще не в теме…
    не ужели этот запрос не выдает ошибку?

    (SELECT COUNT("user_messages.id") - наверно так COUNT("user_messages.id") AS count_messages

    и еще…
    знаю что в запросе еще наверно надо использовать join или group_by, но не знаю как правильно.

    правильно это когда в гугле пишешь - mysql join
    лично мне первым результатом дало - http://www.mysql.ru/docs/man/JOIN.html
    рекомендую
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июль 6, 2011, 2:13 д.п., спустя 3 часа 31 минуту 17 секунд

    select `from`, count(`id`) as `cnt` from `user_messages` group by `from`

    по полю from желательно индекс построить
    не всё полезно, что в swap полезло
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 3:30 п.п., спустя 1 день 13 часов 17 минут

    не ужели этот запрос не выдает ошибку?
     
    (SELECT COUNT("user_messages.id") - наверно так COUNT("user_messages.id") AS count_messages

    не выдает, проверял в phpmyadmin

    master, спасибо, выводит как раз ид того кто написал и сколько сообщений написал. Но вот к сожалению не знаю как здесь еще получить все данные написавшего из таблицы users. Подскажите пожалуйста.
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 3:32 п.п., спустя 2 минуты 21 секунду


    джойнится все равно придется, что б имя пользователя вывести
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 3:51 п.п., спустя 19 минут 15 секунд

    Animator, я понял что надо джойнится, но пока не знаю как правильно.
    Вот master привел пример запроса, дак его надо использовать как подзапрос в основном запросе с джойном или нет?
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:01 п.п., спустя 9 минут 23 секунды

    написать тебе готовый запрос?
    Спустя 40 сек.

    лично мне первым результатом дало - http://www.mysql.ru/docs/man/JOIN.html
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:09 п.п., спустя 7 минут 40 секунд

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

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:27 п.п., спустя 18 минут 34 секунды



    select `from`, count(`id`) as `cnt` from `user_messages` group by `from`



    теперь разовьем тему:

    SELECT `users.*`, count(`um.id`) AS `cnt` FROM `user_messages` AS `um` INNER JOIN `users` AS `u` ON `um.from` = `u.id` WHERE `um.to` = %айди получателя% GROUP BY `um.from`


    пишу от руки, возможны опечатки, не обессудьте :)
    Спустя 208 сек.
    то есть, джойнишся по отправителю, а в условии фильтруешь по получателю, не забудь про индексы, и из таблицы users выгребай только то что нужно, потому как таблицы с сообщениями растут быстрее богатырей русских :)
    ну и потом еще с портиционированием поэкспериментируй, хотя… это я уже больше себе на заметку :)
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:46 п.п., спустя 19 минут 6 секунд

    ай, молодец! справился таки сам :)
    LEFT JOIN - тут зло, а в остальном наши запросі идентичні
    и будь осторожнее с использованием названий типа - FROM
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:51 п.п., спустя 4 минуты 45 секунд

    Animator, твой запрос тоже работает как надо

    SELECT users . * , count( 'user_messages.id' ) AS cnt
    FROM user_messages
    INNER JOIN users ON user_messages.from = users.id
    WHERE user_messages.to =3
    GROUP BY user_messages.from
    Спустя 25 сек.
    спасибо за помощь )
    Спустя 129 сек.
    твой запрос короче и получает все данные о пользователе из таблицы users)
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz Июль 7, 2011, 4:53 п.п., спустя 2 минуты 28 секунд

    будь ласка :)
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Июль 7, 2011, 5:59 п.п., спустя 1 час 5 минут 41 секунду

    такой необычный разговор для местных краев)))
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Июль 7, 2011, 6:52 п.п., спустя 52 минуты 27 секунд

    Sinkler, вiдпочивай
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!