Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 00:21   #1
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию Нагрузка базы. Как всё вместить в один запрос?!

Здравствуйте, нужна срочно помощь!
Есть таблицы:

users
|id|uid|name|...|
tousers
|id|from_uid|to_uid|open|...|


Посылается запрос:
PHP код:
$query $db->mysql_qw("SELECT DISTINCT u.uid,u.name,u.photo FROM ".$db->prefix."users u,".$db->prefix."tousers p WHERE p.open='1';"); 
Отправляем запрос, получаем пользователей у которых есть открытые подарки

Нужно узнать еще их количество, сколько open=1 где to_uid равен uid'у пользователя и еще ORDER BY count'у открытых подарков!!! Как это вместить в один запрос!?

Просто посылать по каждому пользователю еще запрос что бы узнать сколько подарков отправлено - получается полная ж#па.

Помогите, очень нужно, в приложении Вконтакте ТОП грузит очень долго из за этой фигни.
Abuhamed вне форума Ответить с цитированием
Старый 10.12.2011, 00:27   #2
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Добавил лимит 100 (т.к. 100 человек в ТОПе). Оказалось что этот лимит можно спокойно убирать. Т.к. оно берет первых 100 человек, а ведь нигде не сказано что эти первые 100 человек входят в ТОП. Люди, помогите срочно, очень прошу, в игру заходят <2000 человек, а в ближайшее время будет <10.000!! Так базу грузить...
Abuhamed вне форума Ответить с цитированием
Старый 10.12.2011, 01:22   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Abuhamed Посмотреть сообщение
Посылается запрос:
PHP код:
$query $db->mysql_qw("SELECT DISTINCT u.uid,u.name,u.photo FROM ".$db->prefix."users u,".$db->prefix."tousers p WHERE p.open='1';"); 
Отправляем запрос, получаем пользователей у которых есть открытые подарки
Запрос бредовый, т.к. просто выбирает уникальные данные из таблицы users (u.uid,u.name,u.photo) по условию, которое к этой таблице никакого отношения не имеет, оно относится строго к таблице tousers (WHERE p.open='1').
Запрос возвращает просто список записей из users, имеющих уникальный uid - никакие "открытые подарки" тут вообще не при чем.
Andkorol вне форума Ответить с цитированием
Старый 10.12.2011, 01:28   #4
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

спасибо, одну ошибку понял. Но не могли бы помочь, как составить запрос?
Abuhamed вне форума Ответить с цитированием
Старый 10.12.2011, 01:36   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

uid в users - это что?

Последний раз редактировалось Andkorol; 10.12.2011 в 01:47.
Andkorol вне форума Ответить с цитированием
Старый 10.12.2011, 01:46   #6
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

уникальный id пользователя в системе Вконтакте.
Abuhamed вне форума Ответить с цитированием
Старый 10.12.2011, 01:48   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Вобщем, принцип примерно такой:
PHP код:
SELECT COUNT(tt.`uid`) AS `t_count`, tu.`name`, tu.`id
FROM `t_userstu, `t_touserstt 
WHERE tt
.`uid` = tu.`id
AND 
tt.`open` = '1' 
GROUP BY tu.`id
ORDER BY `t_countDESC 
Названия таблиц и нужных вам полей подставьте свои, естественно...
Andkorol вне форума Ответить с цитированием
Старый 10.12.2011, 01:59   #8
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Почему то вообще нечего не возвращает...
Abuhamed вне форума Ответить с цитированием
Старый 10.12.2011, 02:02   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Abuhamed Посмотреть сообщение
Почему то вообще нечего не возвращает...
Наверное, поэтому:
Цитата:
Сообщение от Andkorol Посмотреть сообщение
Названия таблиц и нужных вам полей подставьте свои, естественно...
Andkorol вне форума Ответить с цитированием
Старый 10.12.2011, 02:17   #10
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

заменил

Набранное вами сообщение слишком короткое. Увеличьте ваше сообщение до 10 символов.
Abuhamed вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить диапазоны ячеек из разных файлов в один, но так чтобы они шли один ниже другого? Squarded Microsoft Office Excel 4 24.07.2011 19:24
Как правильно написать запрос на удаление строки из базы данных? Arik80 Помощь студентам 4 24.06.2011 22:15
один mysql запрос для двух рядов. dimron PHP 4 09.06.2011 15:21
Объединить запрос к нескольким таблицам в один (php+MySql) Maxx PHP 17 23.08.2010 16:32
SQL Запрос в базы на разных компьютерах Serval SQL, базы данных 5 27.04.2009 08:42