Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выборка 10 случайных и при этом уникальных user_id
 
 автор: m@rchello   (15.09.2008 в 09:26)   письмо автору
 
 

Добрый день

такой вопрос
есть таблица users
id|login|.......

и таблица msgs
id|user_id|msg| .......


так вот из таблицы msgs нужно выбрать 10 случайных уникальных user_id и подставить к каждому user_id соответствующее поле login из таблицы users ....
соответствие такое
msgs.user_id=users.id


тоесть нужно получить на выходи массив типа

array(
    array(
              'user_id'=>1,
               'login'=>'marchello'
               ),
    array(
              'user_id'=>19,
               'login'=>'test'
               ),
     array(
              'user_id'=>7,
               'login'=>'usver'
               ),
    и тд.
)


а в идеале ещё и получить значение count в котором хранилось бы кол-во записей в таблице msgs для данного user_id

тоесть примерно так


array(
    array(
              'user_id'=>1,
               'login'=>'marchello',
               'count'=>'94'
               ),
    array(
              'user_id'=>19,
               'login'=>'test',
               'count'=>'3'
               ),
     array(
              'user_id'=>7,
               'login'=>'usver',
               'count'=>'7'
               ),
    и тд.
)

  Ответить  
 
 автор: Valick   (15.09.2008 в 09:41)   письмо автору
 
   для: m@rchello   (15.09.2008 в 09:26)
 

Ээээ... аааа... структуру таблици вы сами придумывали?
по идее должно быть так:
user_id|login|....... 

id_msg|user_id|msg| ....... 

и при этом уникальных user_id
Он вообще сам по себе должен быть уникальным как собственно и логин

  Ответить  
 
 автор: m@rchello   (15.09.2008 в 10:25)   письмо автору
 
   для: Valick   (15.09.2008 в 09:41)
 

>и при этом уникальных user_id
>Он вообще сам по себе должен быть уникальным как собственно и логин

они уникальны в таблице users .... но в таблице msgs храняца сообщения этих пользователей ....
если так будет понятней то не "уникальных" а 10 "случайных, разных пользователей" из таблицы msgs

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

  Ответить  
 
 автор: Valick   (15.09.2008 в 11:22)   письмо автору
 
   для: m@rchello   (15.09.2008 в 10:25)
 

Что бы мне было понятнее...
Надо было написать выборка десяти случайных сообщений от неповторяющихся пользователей.

  Ответить  
 
 автор: Root   (15.09.2008 в 11:22)   письмо автору
 
   для: m@rchello   (15.09.2008 в 09:26)
 

>так вот из таблицы msgs нужно выбрать 10 случайных уникальных user_id и подставить к каждому user_id соответствующее поле login из таблицы users ....

почему не выбрать сразу из таблицы users?


SELECT users.id, msg_tbl.`count`, login FROM users
LEFT JOIN (SELECT COUNT(id) AS `count`, user_id FROM msgs GROUP BY msgs.user_id)
AS msg_tbl ON users.id = msg_tbl.user_id
ORDER BY RAND()
LIMIT 10;

  Ответить  
 
 автор: Valick   (15.09.2008 в 11:24)   письмо автору
 
   для: Root   (15.09.2008 в 11:22)
 

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

как только вы мне обьясните почему вода мокрая... так я вам расскажу почему структура таблици должна быть такой))

  Ответить  
 
 автор: Root   (15.09.2008 в 11:31)   письмо автору
 
   для: Valick   (15.09.2008 в 11:24)
 

>Сначала выбрать случайных 10 юзеров, а уже потом выбрать случайное сообщение от каждого из них.

случайное сообщение?

  Ответить  
 
 автор: m@rchello   (15.09.2008 в 11:48)   письмо автору
 
   для: Root   (15.09.2008 в 11:31)
 

мне не нужны случайные сообщения ..... мне нужны случайные ПОЛЬЗОВАТЕЛИ КОТОРЫЕ ДОБАВЛЯЛИ СООБЩЕНИЯ!

  Ответить  
 
 автор: Root   (15.09.2008 в 11:49)   письмо автору
 
   для: m@rchello   (15.09.2008 в 11:48)
 

и в чем проблема?

  Ответить  
 
 автор: m@rchello   (15.09.2008 в 11:56)   письмо автору
 
   для: Root   (15.09.2008 в 11:49)
 

Уже не в чём .... вы показали пример уже .... это сообщение было адресовано товарищу Valick

  Ответить  
 
 автор: Valick   (15.09.2008 в 13:33)   письмо автору
 
   для: m@rchello   (15.09.2008 в 11:56)
 

Тогда выражайтесь яснее:
В базе есть пользователи которые добавляли сообщения и которые не добавляли сообщения. Необходимо выбрать 10 случайных пользователей из числа добавивших сообщения.

  Ответить  
 
 автор: Trianon   (15.09.2008 в 12:20)   письмо автору
 
   для: Root   (15.09.2008 в 11:22)
 

Страшная вещь, по-моему...
Я бы разбил на два запроса.

  Ответить  
 
 автор: Root   (15.09.2008 в 12:28)   письмо автору
 
   для: Trianon   (15.09.2008 в 12:20)
 

а я бы колличество сообщений в отдельном поле хранил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования