Задавайте вопросы, мы ответим
Вы не зашли.
Привет всем!
Вот возникла ситуация:
необходимо отбирать случайные записи, прочитал что можно воспользоваться
запросом "select *from table1 order by rand() limit 0,10" (для примера)
все работает отлично, но далее заказчик захотел сортировать еще эти записи по имени продукта.
Так вот если я пишу select *from table1 order by name,rand() limit 0,10
или select *from table1 order by rand(),name limit 0,10 - запрос срабатывает без rand().
Можно ли как-то отсортировать данные если есть rand()?
Неактивен
Запрос select * from table1 order by name,rand() limit 0,10
отсортирует записи по имени, а среди записей с одинаковым именем произойдет сортировка по rand()
Неактивен
да в том то и дело что rand() несрабатывает вобще
выводятся первые 10 записей по алфавиту
Неактивен
Правильно, в такой схеме rand() будет менять местами ТОЛЬКО записи, у которых имя совпадает. Поясните пожалуйста на словах, а лучше на примере, какую сортировку Вы хотите добиться.
Неактивен
вот структура таблицы:
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
name TEXT NOT NULL
Неактивен
в ней записан список имен производителей всего будет около 1500
я хочу на первой странице вывести случайных 10 производителей отсортированных по именам
Неактивен
SELECT * FROM (SELECT * FROM tbl ORDER BY rand() LIMIT 10) AS T ORDER BY name;
Неактивен
спасибо, попробую
Неактивен
Запомните простое правило - если запрос один, то LIMIT работает всегда после сортировки. Поэтому Ваша задача решается только подзапросом.
Неактивен
Вот по Вашему примеру сделал запрос сложнее:
select * from (
SELECT mk_catalog_product.*, mk_product.pref
FROM mk_catalog_product LEFT JOIN mk_product ON mk_catalog_product.id_main = mk_product.id ORDER BY RAND() limit 0,15) as T
order by name
Неактивен
выдается ошибка: Duplicate column name 'pref'
но я же это поле явно указываю "mk_product.pref"
Неактивен
Поле присутствует дважды. Заменить mk_catalog_product.* на перечисление необходимых Вам полей из этой таблицы.
Второй вариант - дать алиас полю pref: mk_catalog_product.*, mk_product.pref AS mkpref
Неактивен
большое спасибо, дал алиас полю и помогло
Неактивен
а можно еще вопрос?
правда не по этой теме, но он как бы касается этих запросов
На странице я вывожу информацию, а внизу две ссылки на следующую запись
и на предыдущую.
Сейчас я делаю это перебором в коде PHP всей таблицы, а может можно запросом как-то выделить эти записи?
Неактивен
Что означают следующая и предудущая записи?
Неактивен
да это я наверное сильно много хочу от запросов
ну хотя может и есть какие-нибудь методы
допустим записи:
Аня
Вася
Петя
Федя
Яна
так вот если выберу Петю
можно ли определить ID Васи и Феди
Неактивен
естественно ID у них непопорядку идут
Неактивен
А как отсортированы? Если по имени, то
SELECT * FROM table where name > 'Петя' ORDER BY name ASC LIMIT 1
это будет Федя
SELECT * FROM table where name < 'Петя' ORDER BY name DESC LIMIT 1
это будет Вася
Неактивен
отсортированы по названию
надо попробывать, я просто незнал что такие конструкции могут работать
Неактивен