Я пытаюсь получить это сделать:Нужна помощь по вложенному циклу запросов в php и mysql?
<?php
$good_customer = 0;
$q = mysql_query("SELECT user FROM users WHERE activated = '1'"); // this gives me about 40k users
while($r = mysql_fetch_assoc($q)){
$money_spent = 0;
$user = $r['user'];
// Do queries on another 20 tables
for($i = 1; $i<=20 ; $i++){
$tbl_name = 'data' . $i;
$q2 = mysql_query("SELECT money_spent FROM $tbl_name WHERE user = '{$user}'");
while($r2 = mysql_fetch_assoc($q2)){
$money_spend += $r2['money_spent'];
}
if($money_spend > 1000000){
$good_customer += 1;
}
}
}
Это просто пример. Я тестирую на localhost, для одного пользователя он возвращается очень быстро. Но когда я пытаюсь 1000, это берет навсегда, даже не упоминается 40k пользователей.
В любом случае, чтобы оптимизировать/улучшить этот код?
EDIT: Кстати, каждый из остальных 20 таблиц имеет ~ 20 - 40k записи
EDIT2:
Хорошо, отказаться от идеи "деньги тратить". Это мои нынешние структуры:
пользовательская таблица => пользователь PK
logs_week_1 таблица => пользователь FK.
logs_week_2 таблица => пользователь FK
logs_week_3 таблица => пользователь FK
... будет иметь больше журналов таблицы в будущем.
Я хочу найти «среднее время», которое они проводят на моем сайте, время, которое хранится в каждой таблице журналов.
Так вы, ребята, говорили, что еженедельная регистрация журналов - плохая идея? Я должен слиться в один стол?
Почему вы делаете запросы на 20 разных таблицах? Кажется, ваша проблема в дизайне вашей базы данных. Расскажите, как выглядят структуры ваших таблиц. – Galen
Ох .. Эти 20 +++ таблиц хранятся в таблицах журналов в неделю – mysqllearner
БОЛЬШАЯ КРАСНАЯ КНОПКА СИГНАЛА. ОШИБКА ДИЗАЙНА БАЗЫ ДАННЫХ. Но это не редкость. Найдите «SQL Pessimization» и «SQL Antipattern». Если вам нужны данные за одну неделю, у вас нет недельных таблиц. Если у вас слишком много данных, вам нужна база данных OLAP. – dkretz