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]   

> Без описания
ridvik
Отправлено: 13 Сентября, 2012 - 11:38:33
Post Id


Частый гость


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


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

[+]


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /**
  3. * Блок ближайших матчей
  4. *
  5. */
  6. if (!defined('BLOCK_FILE')) {
  7.     Header("Location: ../index.php");
  8.     exit;
  9. }
  10. global $main;
  11. $result3 = $main->db->sql_query("SELECT * FROM ".MATCHS);
  12. $i=1;
  13. echo "<table width='100%'><tr align='center'><td width='10%'>#</td><td width='90%'>Команды</td></tr>";
  14. while ($row = $main->db->sql_fetchrow($result3))
  15. {
  16. $result1 = $main->db->sql_query("SELECT * FROM ".TEAMS." WHERE id='{$row['team1']}'");
  17. $row1 = $main->db->sql_fetchrow($result1);
  18. $result2 = $main->db->sql_query("SELECT * FROM ".TEAMS." WHERE id='{$row['team2']}'");
  19. $row2 = $main->db->sql_fetchrow($result2);
  20. echo "<tr align='center'><td width='10%'>{$i}</td><td width='90%'>{$row1['name']} VS {$row2['name']}</td></tr>";
  21. $i++;
  22. }
  23. echo "</table>";
  24. ?>


я что то не могу его норм написать, при выполнение данного кода в базу идет уйма туча запросов... как можно оптимизировать данный код, что бы бд не нагружалась??? смысл кода таков:
1) делаем выборку ближайших матчей из бд(этого пока тут нету, так как надо оптимизировать сами запросы)
2) потом по ид из таблицы матч полей тим1 и тим2 надо вытащить названия из таблицы команды
3) то есть должно получиьтся типо этого: не 1 вс 15 а тим1 вс тим15, место ид названия команд...

P.S. помогите плиз, че то я ваще не впилю как сделать Огорчение
 
 Top
tuareg
Отправлено: 13 Сентября, 2012 - 13:07:43
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




Убираем запросы из цикла. JOIN и тд.
 
 Top
ridvik
Отправлено: 13 Сентября, 2012 - 13:08:21
Post Id


Частый гость


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


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

[+]


напишите плиз, я этим не владею... если бы мог не написал бы темы(((
 
 Top
tuareg
Отправлено: 13 Сентября, 2012 - 14:12:46
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




А как Вы себе это представляете не зная структуру и необходимые поля это сделать???
Хотя бы простенькую структуру выложите Улыбка

(Отредактировано автором: 13 Сентября, 2012 - 14:15:03)

 
 Top
ridvik
Отправлено: 13 Сентября, 2012 - 14:15:06
Post Id


Частый гость


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


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

[+]


упс, извиняюсь, ща все будет))
1) таблица matchs: задействованные поля id,team1,team2,date_game
2) таблица teams: задействованные поля id,name

team1 и team2 равны полю таблицы teams id
 
 Top
tuareg
Отправлено: 13 Сентября, 2012 - 14:35:54
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t1.`id`,t2.`name` AS team1,t3.`name` AS team2 FROM `matchs` AS t1
  3. INNER JOIN `teams` AS t2 ON t2.`id`=t1.`team1`
  4. INNER JOIN `teams` AS t3 ON t3.`id`=t1.`team2`
  5. WHERE .....
  6.  

Если будете в WHERE использовать `id` то укажите id из какой таблицы используете.
P.S Если Результатов мало то используйте вариант выше.
А можно "схитрить" выбрать сразу все команды в массив
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id`,`name` FROM `team`
  3.  

А потом использовать Вашу конструкцию, только для имени команды не делать запрос, а подставлять из массива
Типа
PHP:
скопировать код в буфер обмена
  1.  
  2. // запрос на все команды
  3. // результат будет  получится типа такого
  4. $arrayAllTeam=[1=>'спартак',3=>'цска'] // и т.д
  5. echo "<tr align='center'><td width='10%'>{$i}</td><td width='90%'>$arrayAllTeam[$row['team1']] VS $arrayAllTeam[$row['team2']]</td></tr>";
  6.  

Немного подправил запрос Улыбка

(Отредактировано автором: 13 Сентября, 2012 - 14:41:03)

 
 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