Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация запроса 
:(
    Опции темы
supercelt
Дата 7.4.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Есть проект. Таблица из 250 ячеек. 5 ячеек в одной стоке.  Туда люди помещают рекланмый баннер.  Выбирают понравившуюся ячейку. В БД это выглядит примерно так: 

id             banner            cell

1              b1.jpg             3
2              b2.gif              28
3              b3.png            105


Таблица генерится так: 
Код

$k=6;
print '<br /><br /><table class="fborder" width="500" align="center">';
  for($i=1; $i<=250; $i++)
  {
    if($i==$k)
    {
    print '</tr><tr>';
    $k=$k+5;
    } 
  
  print '<td class="forumheader2" title="'.$i.'"><center>'.$i.'</center></td>';          
  }

print '</table>


Так вот логично в каждой итерации(это одна ячейка) делать запрос к бд и смотреть есть ли там запись где $i == значению из поля cell.
Но это получится 250 запросов менее чем за 1 сек. Это может создать нагрузку на сервер БД. Как можно это организовать попроще?
PM   Вверх
Feldmarschall
Дата 7.4.2008, 16:59 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



запросить сразу все строки одним запросом?
PM   Вверх
supercelt
Дата 7.4.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Цитата(Feldmarschall @ 7.4.2008,  16:59)
запросить сразу все строки одним запросом?

А как их потом в цикле прогнать и сравнивать все только с одной $i а потом все со следующей $i. Может весь результ помесить как-то в массив и уже работать с ним?
PM   Вверх
Feldmarschall
Дата 7.4.2008, 22:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



как хочешь. но учитывая, что помещать в массив ты будешь все равно в цикле...
PM   Вверх
skyboy
Дата 7.4.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(supercelt @  7.4.2008,  21:46 Найти цитируемый пост)
А как их потом в цикле прогнать и сравнивать все только с одной $i а потом все со следующей $i. Может весь результ помесить как-то в массив и уже работать с ним? 

да ну ладно.
у тебя массив, где ключ массива - cell из БД, а значением - соотвествующий баннер. формируется примерно так:
Код

$banners= array();
$query= mysql_query('SELECT `cell`, `banner` FROM `table`');
while($row= mysql_fetch_array($query, MYSQL_NUM))
    $banners[$row[0]]= $row[1];

// а потом просто выводишь свою таблицу
$k=6;
print '<br /><br /><table class="fborder" width="500" align="center">';
  for($i=1; $i<=250; $i++)
  {
    if($i==$k)
    {
    print '</tr><tr>';
    $k=$k+5;
    } 
  
  print '<td class="forumheader2" title="'.$i.'"><center>';
  if(isset($banners[$i]))
       print($banners[$i]);
  print '</center></td>';          
  }
print '</table>';

PM MAIL   Вверх
supercelt
Дата 8.4.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Спасибо, но чего-то не работает. В бд прописано что 2 баннера стоят в ячейках 23, 25. А выводит что они в 3 и 5 ?????????

Добавлено через 8 минут и 10 секунд
О, я кажется разобрался. Дело вот в чём. Тут к примеру я написал что полей в базе основных 2, но их больше и надо извлекать всю инфу (*). Как тогда запишется эта строчка? )

Код

    $banners[$row[0]]= $row[1];

PM   Вверх
mishaSL
Дата 8.4.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(supercelt @  8.4.2008,  10:33 Найти цитируемый пост)
Тут к примеру я написал что полей в базе основных 2, но их больше и надо извлекать всю инфу (*). Как тогда запишется эта строчка? )

Сделать многомерный массив:
Код

$banners[$row['cell']]= array('banner'=>$row['banner'], 'name' => $row['name']); // и т.д.

Только у вас поле cell в БД уникальное?


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
skyboy
Дата 8.4.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(supercelt @  8.4.2008,  09:33 Найти цитируемый пост)
Как тогда запишется эта строчка? )

а сам-то как думаешь?
PM MAIL   Вверх
supercelt
Дата 8.4.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Я сделал вот так, вроде всё работает)

Код

$banners[$row[0]]=$row[1].','.$row[2].','.$row[3];
//.....
if(isset($banners[$i]))
  {
  $rest=explode(',', $banners[$i]);
  print '<a href="'.e_SELF.'?edit_action='.$rest[1].'"><img src="/e107_images/banners_classifikator/'.$rest[0].'" /></a>';
  }

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.