Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос к БД, вроде какжется что все просто.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Sankaboy
Отправлено: 24 Апреля, 2012 - 15:59:09
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Привет. Помогите составить запрос. Данный, работающий запрос имеет вид:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM `table` WHERE `pole1` != '$nams' AND `pole2` != '1' ORDER BY rand() LIMIT 5
  3.  


В этот запрос нужно добавить еще одно условие:


Пробовал ставить еще один энд, но ошибка.

Вроде бы решил проблему:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. WHERE `aviable` != '1' AND `number_show` >= `already_shown` AND `us_name_post` != '$nam' ORDER
  3.  

(Отредактировано автором: 24 Апреля, 2012 - 17:08:49)

 
 Top
eai
Отправлено: 24 Апреля, 2012 - 18:25:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Ошибка то какая?

(Отредактировано автором: 24 Апреля, 2012 - 18:25:46)

 
 Top
Bio man
Отправлено: 24 Апреля, 2012 - 18:30:56
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Вот это очень грузит БД.
 
 Top
Sankaboy
Отправлено: 24 Апреля, 2012 - 21:19:45
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Bio man пишет:
Вот это очень грузит БД.
CODE (SQL):
скопировать код в буфер обмена

ORDER BY rand()


Как посоветуешь сделать, чтобы не грузило?
 
 Top
Bio man
Отправлено: 24 Апреля, 2012 - 21:28:40
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




А по каким критериям и в каком порядке нужно сортировать?
(Добавление)
И еще, сортировку лучше делать по индексам, если таковые имеются.
 
 Top
Sankaboy
Отправлено: 24 Апреля, 2012 - 21:49:35
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Сортировка идет таким образом:
1. Вывод всего кроме своего. ( `us_name_post` != '$nam' )
2. Аналогично (`aviable` != '1' )
3. Вывод по сравнению (`number_show` >= `already_shown`)

Хотя 2 и 3-е без разницы.

Да и последнее выводиться должно рандомом. В принципе все равно, но главное чтобы не по порядку и не с конца.

Рандом можно вынести с запроса, только думаю разницы не будет. На скорость не проверял.
 
 Top
Bio man
Отправлено: 24 Апреля, 2012 - 22:04:47
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Sankaboy, погугли оптимизацию и сортировку, я не помню эту тему, не могу сказать точно как следует сделать. Но как вариант можно на стороне РНР сделать, хотя бы запрос кэшироваться будет.
(Добавление)
click
типо того можно
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT G.*, rand() AS RO FROM GOODS G ORDER BY RO
 
 Top
Sankaboy
Отправлено: 25 Апреля, 2012 - 09:05:02
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Прочитал многое и возник вопрос:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT name
  2.   FROM random JOIN
  3.        (SELECT CEIL(RAND() *
  4.                     (SELECT MAX(id)
  5.                        FROM random)) AS id
  6.         ) AS r2
  7.        USING (id);


Что такое r2 ? Как я думаю просто поле из таблицы БД.
 
 Top
Мелкий Супермодератор
Отправлено: 25 Апреля, 2012 - 09:39:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




r2 - алиас для временной таблицы.
А запрос этот годится только для непрерывной последовательности id, если будет пропуск - то запрос может ничего не вернуть.

Bio man пишет:
типо того можно

Те же яйца, вид сбоку.

Sankaboy пишет:
Сортировка идет таким образом:

А в первом сообщении темы явно видна ни разу не сортировка, а условие. Определитесь, что нужно? Радость
Впрочем, так вижу, решение уже нашли для проблемы и остался только совет оптимизировать выбор нескольких случайных значений. Но волшебной пилюли для этого нет и если запрос возвращает немного строк (без учёта limit) и резкого их увеличения не предвидится - можно оставить так.


-----
PostgreSQL DBA
 
 Top
Sankaboy
Отправлено: 25 Апреля, 2012 - 13:09:21
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Ну да, если лимит 5 и он постоянный, то нагрузки почти нет. А если сразу запросят выборку 100 пользователей. Интересно что будет? Просто задержка по времени?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB