[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна помощь с выводом категорий
realcrash
Значить есть скрипт который, выдаёт название категорий в 1 столбик:
Хотелосьбы чтобы выдавал в определённое (сами задаём) кол-во столбиков, деля категории (их около 300)
равномерно между ними.



$sql = "select * from categories order by category";

$result = mysql_query($sql ,$db);

if ($myrow = mysql_fetch_array($result)) {

do {

$cat = $myrow["categoryid"];

$sql2 = "select count(wallpaperid) from wallpaper where categoryid = $cat and status = 'L'";
$result2 = mysql_query($sql2 ,$db);
$row = mysql_fetch_row($result2);
$wallpapercount = $row[0];

printf("%s (%s)", $myrow["categoryid"], $myrow["category"], $wallpapercount);

} while ($myrow = mysql_fetch_array($result));

}

/?>

Промогите пожалуйста.



Спустя 4 часа, 25 минут, 9 секунд (29.07.2006 - 05:50) Timok написал(а):
1)не <php, а <b><?php</b> и не /?>, а <b>?></b><br>2) ? зачем дважды проверять <!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->$myrow = mysql_fetch_array($result)<!--QuoteEnd--></div><!--QuoteEEnd--><br>сначала в if, потом в while?<br>3)printf некорректный ($wallpapercount там оказывается лишним). Да ни к чему здесь printf. Юзай print или echo<br>
print $myrow['categoryid'].'('.$myrow['category'].')'.$wallpapercount


по сабжу не понял, что мешает?
<table>
<tr>
<td>Cat1
Cat2
Cat3</td>
<td>Cat4
Cat5
Cat6</td>
<td>Cat7
Cat8
Cat9</td>
</tr>
</table>

Спустя 7 часов, 37 минут, 12 секунд (29.07.2006 - 13:27) realcrash написал(а):
Нужно чтобы скрипт автоматически раскладывал категории по определённому количеству столбцов.

Спустя 2 часа, 29 минут, 37 секунд (29.07.2006 - 15:57) LiZ@RD написал(а):
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->2) ? зачем дважды проверять<br><br> &nbsp; &nbsp;$myrow = mysql_fetch_array($result)<!--QuoteEnd--></div><!--QuoteEEnd--><br>1й раз для инициализации цикла, т.к. он с пост условием (а вот зачем с пост - х3 :) ), потом в цикле для того, что бы получить следущую строку запроса... если я вру - поправьте :)<br><br>Если я правильно понял, вот решение:<br>
 
<?php
 
$sql = 'SELECT * FROM `categories` ORDER BY `category`;';
$result = mysql_query($sql ,$db);
 
$print_rows = 5; // число столбцов, как ты его собираешься получать - я не знаю
$num_rows = mysql_num_rows($result); // количество строк в результате
$num_str = ceil(($num_rows / $print_rows));  // количество строк в столбце (округляем в большую сторону)
 
$echo = '<pre><table><tr>';
for($i = 0; $i < $print_rows; $i++) {
  $echo .= '<td>';
  for($j = 0; $j < $num_str; $j++) {
    if(!($myrow = mysql_fetch_array($result)) {
      $echo .= '	';
      break;
    }
    $sql2 = 'SELECT COUNT(`wallpaperid`) FROM `wallpaper` WHERE `categoryid` = ' . $cat . ' AND `status` =  'L '';
    $result2 = mysql_query($sql2 ,$db);
    $row = mysql_fetch_row($result2);
    $wallpapercount = $row[0]; // не знаю что ты хотел с этим сделать ;-)
    $echo .= $myrow['categoryid'] . '(' . $myrow['category'] . ')	';
  }
  $echo .= '</td>';
};
$echo .= '</tr></table></pre>';
echo $echo;
 
?>
 

Может что не правильно, я не проверял %) Если что - пиши ;-)

Спустя 26 минут, 54 секунды (29.07.2006 - 16:24) realcrash написал(а):
<!--QuoteBegin-LiZ@RD+--><div class='quotetop'>QUOTE(LiZ@RD)</div><div class='quotemain'><!--QuoteEBegin--><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->2) ? зачем дважды проверять<br><br> &nbsp; &nbsp;$myrow = mysql_fetch_array($result)<!--QuoteEnd--></div><!--QuoteEEnd--><br>1й раз для инициализации цикла, т.к. он с пост условием (а вот зачем с пост - х3 :) ), потом в цикле для того, что бы получить следущую строку запроса... если я вру - поправьте :)<br><br>Если я правильно понял, вот решение:<br>
 
<?php
 
$sql = 'SELECT * FROM `categories` ORDER BY `category`;';
$result = mysql_query($sql ,$db);
 
$print_rows = 5; // число столбцов, как ты его собираешься получать - я не знаю
$num_rows = mysql_num_rows($result); // количество строк в результате
$num_str = ceil(($num_rows / $print_rows));  // количество строк в столбце (округляем в большую сторону)
 
$echo = '<table>';
for($i = 0; $i < $print_rows; $i++) {
  $echo .= '<tr>';
  for($j = 0; $j < $num_str; $j++) {
    if(!($myrow = mysql_fetch_array($result)) {
      $echo .= '<td>&nbsp;</td>';
      break;
    }
    $sql2 = 'SELECT COUNT(`wallpaperid`) FROM `wallpaper` WHERE `categoryid` = ' . $cat . ' AND `status` =  'L '';
    $result2 = mysql_query($sql2 ,$db);
    $row = mysql_fetch_row($result2);
    $wallpapercount = $row[0]; // не знаю что ты хотел с этим сделать ;-)
    $echo .= '<td>' . $myrow['categoryid'] . '(' . $myrow['category'] . ')</td>';
  }
  $echo .= '</tr>';
};
$echo .= '</table>';
echo $echo;
 
?>
 

Может что не правильно, я не проверял %) Если что - пиши ;-)

Parse error: parse error, unexpected '{' in x:home est1.ruwww header.php on line 22

Спустя 16 минут, 25 секунд (29.07.2006 - 16:40) LiZ@RD написал(а):
realcrash, сбил с толку, на 14й строчке ошибка, одной скобочки закрывающейся нет, если у тебя такая ошибка...
if(!($myrow = mysql_fetch_array($result))) {

P.S. Не надо цитировать слишком много, достаточно было бы написать "LiZ@RD" =)) Или вообще не писать %) Пожалейте чужой траффик

Спустя 1 час, 47 минут, 38 секунд (29.07.2006 - 18:28) realcrash написал(а):
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in x:home est1.ruwww header.php on line 28

Убрал $row = mysql_fetch_row($result2);, ошибку больше невыдаёт. Дальше,

user posted image
Выдаёт не 5 ($print_rows = 5;) колонны, а строки, должно в ($print_rows = 5;) указываться число колонн и листинг категорий выдаваться:

1 4 7 10 13
2 5 8 11 14
3 6 9 12 15


+ завести переменную с колличеством каткгорий (строк) в колонне.

Спустя 3 часа, 33 минуты, 31 секунда (29.07.2006 - 22:01) LiZ@RD написал(а):
1 - смотри листинг в моём 1м посте, я его отредактировал, но совсем не уверен в правильности ;)<br>2 - а количество строк точно будет одинаково в каждом столбце? и важно ли в каком порядке заполнятся будет массив? (слева направо по строчкам или сверху вниз по столбцам?)<br>И еще вариант, к сожалению, протестить его не могу на данный момент :(<br>
 
<?php
 
$sql = 'SELECT * FROM `categories` ORDER BY `category`;';
$result = mysql_query($sql ,$db);
 
$print_rows = 5; // число столбцов, как ты его собираешься получать - я не знаю
$num_rows = mysql_num_rows($result); // количество строк в результате
$num_str = ceil(($num_rows / $print_rows));  // количество строк в столбце (округляем в большую сторону)
 
$echo = '<table>';
for($j = 0; $j < $num_str; $j++) {
  $echo .= '<tr>';
  for($i = 0; $i < $print_rows; $i++) {
    if(!($myrow = mysql_fetch_array($result)) {
      $echo .= '<td>&nbsp;</td>';
      continue;
    }
    $sql2 = 'SELECT COUNT(`wallpaperid`) FROM `wallpaper` WHERE `categoryid` = ' . $cat . ' AND `status` =  'L '';
    $result2 = mysql_query($sql2 ,$db);
    $row = mysql_fetch_row($result2);
    $wallpapercount = $row[0]; // не знаю что ты хотел с этим сделать ;-)
    $echo .= '<td>' . $myrow['categoryid'] . '(' . $myrow['category'] . ')</td>';
  }
  $echo .= '</tr>';
};
$echo .= '</table>';
echo $echo;
 
?>
 

Спустя 17 минут, 34 секунды (29.07.2006 - 22:19) realcrash написал(а):
Эх, что-то я торможу.
Значит так:
В ($print_rows = 5;) указываем число коллон, а число категорий равномерно делиться между столбцами (остаток вводим в 1-й столбец) в следующем порядке:

1 4 7 10 13
2 5 8 11 14
3 6 9 12 15

или (если кол-во не делиться ровно на кол-во столбцов)

(16 cat)
1 5 8 11 14
2 6 9 12 15
3 7 10 13 16
4

(17 cat)
1 5 9 12 15
2 6 10 13 16
3 7 11 14 17
4 8

Спустя 3 минуты, 48 секунд (29.07.2006 - 22:23) LiZ@RD написал(а):
realcrash,
значиит, тебе надо что бы воводилось по столбцам, а не по строчкам, я правильно понял твою мысль? %)

что я подправил тестил? %)

Спустя 21 секунда (29.07.2006 - 22:23) realcrash написал(а):
QUOTE
1 - смотри листинг в моём 1м посте, я его отредактировал, но совсем не уверен в правильности wink
2 - а количество строк точно будет одинаково в каждом столбце? и важно ли в каком порядке заполнятся будет массив? (слева направо по строчкам или сверху вниз по столбцам?)
И еще вариант, к сожалению, протестить его не могу на данный момент sad

Во, это уже длиже к делу, вот только заполнение колонны с верху вниз.

1 4 7 10 13
2 5 8 11 14
3 6 9 12 15

Спустя 2 минуты, 51 секунда (29.07.2006 - 22:26) LiZ@RD написал(а):
значит, я не так тебя понял %)) какой вариант работает? в 1м посте или в последнем листинге? :))

Спустя 3 минуты, 50 секунд (29.07.2006 - 22:30) realcrash написал(а):
В #8 работает но листинг идет с лева на право, а нужно с верху вниз.

Спустя 39 минут, 58 секунд (29.07.2006 - 23:10) LiZ@RD написал(а):
 
<?php
 
$sql = 'SELECT * FROM `categories` ORDER BY `category`;';
$result = mysql_query($sql ,$db);
 
$print_rows = 5; // число столбцов, как ты его собираешься получать - я не знаю
$num_rows = mysql_num_rows($result); // количество строк в результате
$num_str = ceil(($num_rows / $print_rows));  // количество строк в столбце (округляем в большую сторону)
 
for($j = 0; $j < $num_str; $j++) {
  for($i = 0; $i < $print_rows; $i++) {
    if(!($myrow = mysql_fetch_array($result))) {
      $arr[$j][$i] = ' ';
      continue;
    }
    $sql2 = 'SELECT COUNT(`*`) FROM `wallpaper` WHERE `categoryid` = ' . $cat . ' AND `status` =  'L ''; // или всё же COUNT(`wallpaperid`)? %))
    $result2 = mysql_query($sql2 ,$db);
    $row = mysql_fetch_row($result2);
    $wallpapercount = $row[0]; // не знаю что ты хотел с этим сделать ;-)
    $arr[$j][$i] = $myrow['categoryid'] . '(' . $myrow['category'] . ')';
  }
}
 
$echo .= '
<pre>';
for($i = 0; $i < $print_rows; $i++) {
  for($j = 0; $j < $num_str; $j++) {
    $echo .= $arr[$j][$i] . '	';
  }
  $echo .= '
';
}
echo .= '</pre>';
echo $echo;
 
?>
 


P.S. что-то я ступил, можно было бы без двух циклов обойтись... но править влом, спать уже пора :))

Спустя 18 часов, 39 минут, 20 секунд (30.07.2006 - 17:49) realcrash написал(а):
Опять траблы. Нельзя просто переделать листинг в скрипте 8-го поста?


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.