Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите разобраться с запросом из самоучителя(ГАЛЕРЕЯ).

Сообщения:  [1-10]   [11-11] 

 
 автор: cheops   (20.08.2006 в 11:27)   письмо автору
 
   для: куч1963   (20.08.2006 в 07:59)
 

Да это вополне допускается - если внешний цикл возвращает не слишком много записей - всё будет работать достаточно быстро.

   
 
 автор: куч1963   (20.08.2006 в 07:59)   письмо автору
 
   для: cheops   (20.08.2006 в 00:47)
 

Интересует такой вопрос, насколько допустима такое содержание кода

while($cat=mysql_fetch_array($ctg))
 {
      echo"<table width='458' border='0'>
  <tr>
    <td colspan='3'>".$cat['group_name']."</td>
  </tr></table>";
 $query1="SELECT * FROM db_gallery_image WHERE id_group = ".$cat['id_group']." ORDER BY RAND() LIMIT 3";
  $p=mysql_query($query1);
    while($picture=mysql_fetch_array($p))
    {

  echo "<table width='458' border='0'><tr>
    <tr><td><img src='admin/ad1/gallery/".$picture['image_small']."'></td></tr>
  </tr>
</table>";
}


То есть уместно ли при небольшом объёме вывода использовать запрос внутри цикла. И что больше грузит базу, два простых запроса, один из которых в цикле, или один двутабличный запрос?

   
 
 автор: cheops   (20.08.2006 в 00:47)   письмо автору
 
   для: andreybeat   (19.08.2006 в 16:57)
 

Вынесите тэг <table> за границы цикла, т.е. вместо
while($picture=mysql_fetch_array($p)) 
    { 

  echo "<table width='458' border='0'><tr> 
    <tr><td><img src='admin/ad1/gallery/".$picture['image_small']."'></td></tr> 
  </tr> 
</table>"; 
}

пишите

  echo "<table width='458' border='0'><tr> ";
while($picture=mysql_fetch_array($p)) 
    { 
   echo '<td><img src='admin/ad1/gallery/".$picture['image_small']."'></td>';
}
echo "  </tr> 
</table>"; 
?>

   
 
 автор: andreybeat   (19.08.2006 в 16:57)   письмо автору
 
   для: andreybeat   (19.08.2006 в 16:43)
 

вот так работает правильно


$query = "SELECT db_gallery_group.id_group AS id_group,
                   db_gallery_group.group_name AS  group_name ,
                   COUNT(db_gallery_image.id_image) AS total
            FROM db_gallery_group, db_gallery_image
            WHERE db_gallery_image.id_group = db_gallery_group.id_group AND
                  db_gallery_group.group_hide  = 'show' AND db_gallery_image.image_hide = 'show'
            GROUP BY db_gallery_group.id_group";
$ctg=mysql_query($query);
if(!$ctg) echo "erro sql 1";

if(mysql_num_rows($ctg)>0)
{
 while($cat=mysql_fetch_array($ctg))
 {
      echo"<table width='458' border='0'>
  <tr>
    <td colspan='3'>".$cat['group_name']."</td>
  </tr></table>";
 $query1="SELECT * FROM db_gallery_image WHERE id_group = ".$cat['id_group']." ORDER BY RAND() LIMIT 3";
  $p=mysql_query($query1);
    while($picture=mysql_fetch_array($p))
    {

  echo "<table width='458' border='0'><tr>
    <tr><td><img src='admin/ad1/gallery/".$picture['image_small']."'></td></tr>
  </tr>
</table>";
}
}
}


но у меня фотографии выводит не в строку а в столбик это можно как то изменить ?

   
 
 автор: andreybeat   (19.08.2006 в 16:43)   письмо автору
 
   для: cheops   (19.08.2006 в 16:29)
 

вот так правильно или нет? :


$query = "SELECT db_gallery_group.id_group AS id_group,
                   db_gallery_group.group_name AS  group_name ,
                   COUNT(db_gallery_image.id_image) AS total
            FROM db_gallery_group, db_gallery_image
            WHERE db_gallery_image.id_group = db_gallery_group.id_group AND
                  db_gallery_group.group_hide  = 'show' AND db_gallery_image.image_hide = 'show'
            GROUP BY db_gallery_group.id_group";
$ctg=mysql_query($query);
if(!$ctg) echo "erro sql 1";

if(mysql_num_rows($ctg)>0)
{
 while($cat=mysql_fetch_array($ctg))
 {
 $query1="SELECT * FROM db_gallery_image WHERE id_group = ".$cat['id_group']." ORDER BY RAND() LIMIT 3";
  $p=mysql_query($query1);
    while($picture=mysql_fetch_array($p))
    {
   echo"<table width='458' border='0'>
  <tr>
    <td colspan='3'>".$cat['group_name']."</td>
  </tr>
  <tr>
    <td>".$picture['image_name']."<img src='admin/ad1/gallery/".$picture['image_small']."'></td>
  </tr>
</table>";
}
}
}

   
 
 автор: cheops   (19.08.2006 в 16:29)   письмо автору
 
   для: andreybeat   (19.08.2006 в 16:12)
 

А вы как выводите фотографии в цикле? Фунция mysql_fetch_array() должна вызывать три раза.

   
 
 автор: andreybeat   (19.08.2006 в 16:12)   письмо автору
 
   для: cheops   (17.08.2006 в 13:50)
 

Я всё сделал как вы написали всё работает , но у меня проблема я не знаю как теперь отобразить именно три разных случайных фотографии! тоесть если я просто сделаю $picture['image'] то у меня во всех трёх столбцах таблицы будет одна и таже случайная фотография , а мне надо три разных в каждом столбце!подскажите

   
 
 автор: cheops   (17.08.2006 в 13:50)   письмо автору
 
   для: andreybeat   (17.08.2006 в 12:56)
 

Да, предполагается, что запрос на вывод 3-х случайных фотографий будет выполняться в цикле обработки первого запроса.

   
 
 автор: andreybeat   (17.08.2006 в 12:56)   письмо автору
 
   для: cheops   (17.08.2006 в 12:10)
 

А я могу подставить вместо N результат первого запроса там где, как раз и идёт вывод групп ну тоесть чтоб к примеру быбралось 3 группы и под каждой отобразилось 3 картинки из этой группы.?

   
 
 автор: cheops   (17.08.2006 в 12:10)   письмо автору
 
   для: andreybeat   (17.08.2006 в 03:17)
 

Хм... вы именно в этот запрос хотите это поместить? Удобнее будет для каждой группы оформить свой собственный запрос
SELECT * FROM photo WHERE id_catalog = N ORDER BY RAND() LIMIT 3

где N - номер каталога.

   

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования