while - как правильно вывести список на три блока?

scooterok

Новичок
Приветствую.
Есть задача получить имеющийся список данных и разместить его по трем блокам.
Столкнулся с проблемой, что мой код выводит каждую следующую запись, по очереди, в каждый блок.
Вариант такой не совсем подходит, нужно скажем выводить во все три блока данные, но в порядке, скажем по пять записей на каждый блок, к примеру,
Сейчас получается так:
Первая запись - Первый блок
Вторая запись - Второй блок
Третья запись - Третий блок
Четвертая запись - Первый блок
и т.д.
Т.е. мой код выводит в каждый блок следующую запись, что в принципе логично.
Исходя из моего когда, чтоб не писать несколько while, в одном while это можно реализовать?
Подскажите как? :)

Привожу пример кода:
Код:
$query  =  "SELECT  *  FROM `string` GROUP BY `sort`";
    $result  =  mysql_query($query,  $link) or die(mysql_error());
   $count = "";
   while($vyvod = mysql_fetch_assoc($result)) {
       if($count == ""){$count = 0;}
      
           if($count %3==0){
$block1.= $vyvod['2'];
$block1.= $vyvod['3'];
           }
           if($count %3==1){
$block2.= $vyvod['2'];
$block2.= $vyvod['3'];
           }
           if($count %3==2){
$block3.= $vyvod['2'];
$block3.= $vyvod['3'];
           }
$count++;
}
mysql_free_result($result);
В таком виде оно выводит каждую запись в каждый блок, блоков три, соответственно четвертую запись выводит в первый и т.д.

А мне нужно, чтоб в три блока выводилось скажем по пять записей.
В первый блок с 1 по 5, во второй с 5 по 10, в третий с 10 по 15...
Но записей может быть и больше, соответственно нужно их как-то пропорционально разделять еще.
Сейчас допустим 16, и 16-ю он бросил в первый блок, а не добавил в последний, так и нужно, но не каждую строку в каждый блок, а каждые 5 в каждый блок.

Можно ли такое реализовать в единственном while? =)
Как?
Принцип логики я понимаю, но мозги уже кипят), не могу довести это до ума.
Буду признателен за подсказки и помощь.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Исходя из моего когда, чтоб не писать несколько while
Перевод: "Я ленивая сволочь, подскажите, как потакать моей лени поудобнее"…

Правильный вопрос: "Как разбить выборку, чтобы сформировать три массива, по одному для каждого блока".
 

scooterok

Новичок
Перевод: "Я ленивая сволочь, подскажите, как потакать моей лени поудобнее"…

Правильный вопрос: "Как разбить выборку, чтобы сформировать три массива, по одному для каждого блока".
Там не так разбить выборку, так как она динамическая, сейчас например 18 записей, разбил по 6 на три блока...
Если будет 19-я мне ее нужно в первую колонку по тому же принципу.
Пока Вы думали как подстебнуть, и что-то такое красивое написать, чтоб все поржали, я не танцевал, а дальше продолжал пробовать разные варианты.
Вот что получилось:

Код:
$query  =  "SELECT  *  FROM `string` GROUP BY `sort`";
    $result  =  mysql_query($query,  $link) or die(mysql_error());
   $count = "";
while($vyvod = mysql_fetch_assoc($result)) {
       if($count == ""){$count = 0;}
   if($vyvod['active'] > 0){
           if($count %1==0){
           if($count < 6){
$block1.= $vyvod['2'];
$block1.= $vyvod['3'];
           }
           if($count >= 6 && $count < 12){         
$block2.= $vyvod['2'];
$block2.= $vyvod['3'];
}
           if($count > 12){         
$block3.= $vyvod['2'];
$block3.= $vyvod['3'];
}
    
           }
        
$count++;
       }
}
mysql_free_result($result);

Теперь стоит задача как циферки типа:
if($count < 6)
if($count >= 6 && $count < 12)
if($count > 12)
... обработать так, чтоб автоматически добавлялась нужная цифра, в зависимости от ко-ва записей в БД.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Там не так разбить выборку, так как она динамическая
Выборка по определению динамическая. Ваше утверждение ничего к задаче не добавляет.

@antson, судя по первому сообщению, ему надо
Код:
1 2 3
4 5 6
7 8 9
Но сейчас я уже не уверен.

И, да, @scooterok, отформатируй свои сообщения нормально.
(а ещё там [/php] есть…)
 

scooterok

Новичок
Ладно, спасибо за "помощь", как-то сам...
Я нигде не писал, что моё направление основное это программирование.
У меня другие цели и задачи. Когда-то занимался серьезно программированием, потом подзабыл, попросил помочь...
Зачем разводить флуд?! Ленивый не ленивый какая разница?
Не можешь, не хочешь помочь, зачем себя утруждать писать мнение о человеке, которого в лицо даже не видел...
Всем спасибо и хорошего настроения!
 

scooterok

Новичок
.....
И, да, @scooterok, отформатируй свои сообщения нормально.
(а ещё там [/php] есть…)
Отредактировал, прошу извинить, не нашел. Изначально искал, но так как редко обращаюсь за помощью по программированию уже и забыл где находится код...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@scooterok, ты в голове себе представляешь как должно быть? Я вот сомневаюсь.

У тебя одна задача - выяснить условие по которому ты будешь начинать новую строку.
Логика: Допустим, ты просто выводишь символы с массива один-за-одним. Когда у тебя на строке будет три символа - тебе надо вывести после третьего <br> и сделать таким образом перевод на строку 2, 3 и т.д.

Теперь вопрос, каким условием ты поймешь, что у тебя в строке 3, 6, 9 и т.д. символов? Подсказка - деление по модулю (http://php.net/manual/ru/language.operators.arithmetic.php)

И ты все написал, только вот условие перехода блока, видимо, не осилил.
 

scooterok

Новичок
@scooterok, ты в голове себе представляешь как должно быть? Я вот сомневаюсь.

У тебя одна задача - выяснить условие по которому ты будешь начинать новую строку.
Логика: Допустим, ты просто выводишь символы с массива один-за-одним. Когда у тебя на строке будет три символа - тебе надо вывести после третьего <br> и сделать таким образом перевод на строку 2, 3 и т.д.

Теперь вопрос, каким условием ты поймешь, что у тебя в строке 3, 6, 9 и т.д. символов? Подсказка - деление по модулю (http://php.net/manual/ru/language.operators.arithmetic.php)

И ты все написал, только вот условие перехода блока, видимо, не осилил.
Спасибо, я уже разобрался.
 
Сверху