Помогите выпольнить SQL запрос

 
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Надо выбрать из таблицы cms_users 12 случайных пользователей и что бы среди них был один конкретный пользователь
Выполняю так:
Код PHP:
  1. SELECT i.*
  2. FROM cms_users i
  3. WHERE EXISTS (SELECT i.* FROM cms_users i WHERE i.id = 14) AND (i.pol = '2')
  4. ORDER BY RAND()
  5. LIMIT 0, 12
Пользователь с id 14 иногда появляется иногда пропадает, может быть это из за RAND()?

Как выполнить запрос что бы среди случайных пользователей присутствовал юзер с id 14
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Попробуйте выбрать конкретного юзера, а потом еще 11 случайных.
NOP
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 479
Проблема в том, что ORDER BY RAND() и LIMIT 0, 12 задается к всему запросу, отсюда не получается сделать правильно выборку... Сейчас попробую поэкспериментировать...
Посетитель
small user social cms
Медаль
Сообщений: 479
Вот вариант, вроде всё работает smile
Код PHP:
  1. SELECT i.id as id FROM cms_users i WHERE i.id!=16 LIMIT 0, 11
  2. UNION
  3. SELECT c.id as id FROM cms_users c WHERE c.id=16
  4. ORDER BY RAND()
Посетитель
small user social cms
Медаль
Сообщений: 479
Отпишитесь хотя бы - правильно или нет... Интересно же))
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Project-S, Спасибо для данного запроса всё отлично работает)
Есть еще один запрос только там UNION пишет The used SELECT statements have a different number of columns...
Вообщем есть таблица cms_flirtiki и в нем 5 полей id, sender_id, to_user, popitka, status. Мне надо выводить список пользователей которые их ID и мой ID не совпадают в поле sender_id и to_user... Помоги разобраться уже два дня мучаюсь)
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 479
Что-то не понял, что надо сделать))
Нужен более подробный пример...
Мне надо выводить список пользователей которые их ID и мой ID не совпадают в поле sender_id и to_user
Имеется ввиду, чтобы sender_id и to_user были разные? или что?
Редактировалось: 1 раз (Последний: 23 августа 2013 в 15:17)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Помогите выпольнить SQL запрос


Надо НЕ выводить тех кому я же отправил флиртик или от кого получал
допустим в таблице cms_flirtiki поля to_user не был ровно ID выводимого юзера (см. фото) и sender_id не был ровно мойID
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 479
Вроде понятно smile
А что если попробовать следующее?
Сразу отмечу, по запросам смотрите на нагрузку и время исполнения запроса. А то я Вам сейчас запросы понапишу, а потом у Вас будет много народу и хостинг не справится))
Итак, данный пример чисто наугад, так как у меня нет Вашей базы - пробуйте сами smile
У Вас должна быть переменная, которая обозначается, кто я, то есть мое ID.
Допустим, эта переменная равна "14"
Код PHP:
  1. SELECT us.id as user_id FROM cms_users us
  2. WHERE us.id NOT IN (SELECT sender_id FROM cms_flirtiki WHERE to_user=14)
  3. AND us.id NOT IN (SELECT to_user FROM cms_flirtiki WHERE sender_id=14)
  4.  
Но, что-то мне подсказывает, что этот запрос неправильный с точки зрения оптимизации...
Можете попробовать smile
Отпишитесь о результатах...
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Project-S, Спасибо) работает) время исполнения проверил в phpmyadmin: Запрос занял 0.0073 сек.
Это нормально?
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 479
Evanescence:
время исполнения проверил в phpmyadmin: Запрос занял 0.0073 сек.
Это нормально?
Это надо Вам смотреть))
Чем больше будет таблица, тем медленнее запрос исполнится. Используйте в таблице индексы.
Экспериментируйте, ускоряя работу сайта.
Модератор
small user social cms
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 435
ORDER BY RAND() - Это Зло!

http://jan.kneschke.de/projects/mysql/order-by-rand/
Редактировалось: 1 раз (Последний: 23 августа 2013 в 19:04)
Посетитель
small user social cms
Медаль
Сообщений: 266
Александр:
ORDER BY RAND() - Это Зло!
Его можно применять, но нужно ограничить разброс рандомного запроса. иначе будет ооочень медленно.

Для автора возможно будет полезно:
http://habrahabr.ru/post/55864/
Редактировалось: 1 раз (Последний: 23 августа 2013 в 19:24)
http://watson-studio.com
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Я пока только учусь и по этому не знаю как использовать индексы в таблицах и как оптимизировать запросы... А вот насчет ORDER BY RAND() - случайная выборка используется в трех запросах в двух не объязательно по этому если это зло, могу использовать только в одном месте smile
Суть данного компонента в том что если Вася отправить флиртик Маше - у Машы будет 5 попыток и 12 случайных кандидатов и она должна найти того кто ей отправил флиртик, за каждую ошибку от имени Машы отправиться флиртик тому юзеру...
Помогите выпольнить SQL запрос

Вообщем компонент на 90% готовь и скоро выложу на паблик :)
Редактировалось: 1 раз (Последний: 23 августа 2013 в 20:27)
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 266
еще один вариант, получить общее кол-во записей в таблице, затем средствами пхп рандомно выбрать необходимое кол во id и сделать выборку по этим ид, т.е. рэндом будет использоваться пхп, а таблица лишь вернет записи тех значений которые передадут в запросе. Сумбурно написал, думаю разберетесь. + в том что запрос будет простым соответственно быстрее будет обработан.
http://watson-studio.com
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.