[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: RAND + while
Xpund
$query = mysql_query("SELECT * FROM `table` WHERE `total`>=`location` ORDER BY RAND() LIMIT ".$kolvo."");


Такая проблема:
например $kolvo = 3;
А в базе только 2 записи, как мне при таком раскладе сделать, что бы выводилось именно 3, то есть что бы 3ья запись была рандомная из этих 2ух


$i = 1;
while($i <= $kolvo)
{
echo '<td width="'.$width.'">'.$row['id'].'</td>';
$i++;
}


Аналогично, если $kolvo =7, а в базе только 3 записи.



Спустя 4 часа, 35 минут, 42 секунды (16.04.2012 - 12:35) Xpund написал(а):
Пожалуйста, помогите, если что то не понятно написал, скажите что именно!

Спустя 3 минуты, 36 секунд (16.04.2012 - 12:39) walerus написал(а):
Чему равно(откуда берется) $width ? и как получаешь - $row['id'] ?

Спустя 6 минут, 33 секунды (16.04.2012 - 12:45) Xpund написал(а):
$width - не обращайте внимания, обычная переменная!
$row['id'] - это тоже переменная, которая будет браться после $row = mysql_fetch_array($query);

Спустя 22 минуты, 54 секунды (16.04.2012 - 13:08) walerus написал(а):
Ну так оно же будет так


$query = mysql_query("SELECT * FROM `table` WHERE `total`>=`location` ORDER BY RAND() LIMIT ".$kolvo."");

$result_array = array(); // Временной массив с результатами
while ($row = mysql_fetch_array($query , MYSQL_NUM))
{
// Заносим все в масив
$result_array[] = $row["id"];
}

// Теперь твой код
$i = 1;
while($i <= $kolvo)
{
echo '<td width="' . $width . '">' . $result_array[array_rand($result_array)] . '</td>';
$i++;
}


Будет каждый раз подставлять рандомно из резльтирующго массива данные, если нужно как то иначе, - пиши.

Спустя 1 минута, 47 секунд (16.04.2012 - 13:10) Игорь_Vasinsky написал(а):
<?php
$arr = range(0,12);

$i = 0;

//count of lines <tr>
$tr = 7;

// 3 TD on the TR
$td = 3;

$count = $tr*$td;

echo "<table><tr>\r\n";

for($i=0; $i<=$count-1; $i++)

if(isset($arr[$i]))
{
if($i%3 == 0)
echo "</tr><tr>\r\n";

echo "<td>".$arr[$i]."<td>\r\n";
}
else
{
if($i%3 == 0)
echo "</tr><tr>\r\n";

echo "<td>rand:" .$arr[rand(0, sizeof($arr)-1)]."<td>\r\n";
}


echo "</tr></table>\r\n";
?>



0		1		2	
3 4 5
6 7 8
9 10 11
12 rand:5 rand:12
rand:8 rand:10 rand:7
rand:4 rand:1 rand:5

Спустя 4 минуты, 33 секунды (16.04.2012 - 13:14) Игорь_Vasinsky написал(а):
можешь обернуть в функцию - 3 аргумента: массив, рядов, ячеек в ряду и работать так:

1. Делаешь выборку из БД в ассоц. массив
2. Формируешь свой индексный массив без пропуска индекса
3. Вызов функции

Спустя 1 минута, 26 секунд (16.04.2012 - 13:16) Xpund написал(а):
Игорь_Vasinsky
Спаибо, попробую всё сейчас, потом отпишу свой вариант!

Спустя 2 минуты, 45 секунд (16.04.2012 - 13:18) walerus написал(а):
Xpund - Мой ответ чем то не устроил ?

Спустя 14 минут, 35 секунд (16.04.2012 - 13:33) Xpund написал(а):
walerus
Не заметил unsure.gif
Спасибо!!!

Спустя 2 минуты, 50 секунд (16.04.2012 - 13:36) Xpund написал(а):
Цитата (walerus @ 16.04.2012 - 10:08)
Ну так оно же будет так


$query = mysql_query("SELECT * FROM `table` WHERE `total`>=`location` ORDER BY RAND() LIMIT ".$kolvo."");

$result_array = array(); // Временной массив с результатами
while ($row = mysql_fetch_array($query , MYSQL_NUM))
{
// Заносим все в масив
$result_array[] = $row["id"];
}

// Теперь твой код
$i = 1;
while($i <= $kolvo)
{
echo '<td width="' . $width . '">' . $result_array[array_rand($result_array)] . '</td>';
$i++;
}


Будет каждый раз подставлять рандомно из резльтирующго массива данные, если нужно как то иначе, - пиши.

А если несколько переменных из базы вытащить надо, и ещё при этом html оформление, то есть:

echo '<td width="'.$width.'"><div id="pic"><img src="'.$row['pic'].'" border=1 width="70px" height="70px"></div><div id="text"><b><a href="#">'.$row['title'].'</a></b><br>'.$row['text'].'</div></td>';

Спустя 7 минут, 5 секунд (16.04.2012 - 13:43) Xpund написал(а):
И ещё, надо что бы это работало в том случае, если кол-во совпадений в базе меньше нужного!

Спустя 6 минут, 37 секунд (16.04.2012 - 13:50) walerus написал(а):
$query = mysql_query("SELECT * FROM `table` WHERE `total`>=`location` ORDER BY RAND() LIMIT ".$kolvo."");

$result_array = array(); // Временной массив с результатами
while ($row = mysql_fetch_array($query , MYSQL_NUM))
{
// Заносим все в масив
$result_array[] = $row;
}

// Теперь твой код
$i = 1;
while($i <= $kolvo)
{
$tmp_num = array_rand($result_array);

echo '<td width="'.$width.'">'.
'<div id="pic"><img src="'.$result_array[$tmp_num]['pic'].'" border=1 width="70px" height="70px"></div>'.
'<div id="text"><b><a href="#">'.$result_array[$tmp_num]['title'].'</a></b><br>'.$result_array[$tmp_num]['text'].'</div>'.
'</td>';

$i++;
}

Спустя 1 минута, 11 секунд (16.04.2012 - 13:51) walerus написал(а):
Цитата (Xpund @ 16.04.2012 - 10:43)
И ещё, надо что бы это работало в том случае, если кол-во совпадений в базе меньше нужного!

Должно работать.

Спустя 2 минуты, 32 секунды (16.04.2012 - 13:53) Xpund написал(а):
walerus
Про последний вариант, показывает 3 колонки, но они пустые, данные из базы не досталются.
Я проверял, все коннекты и название верны, дело именно в коде

Спустя 1 минута, 5 секунд (16.04.2012 - 13:54) Игорь_Vasinsky написал(а):
Цитата
А если несколько переменных из базы вытащить надо, и ещё при этом html оформление, то есть:


формируешь многомерный смешанный массив (1й у-нь индексны, подуровни ассоц-е)

Цитата
И ещё, надо что бы это работало в том случае, если кол-во совпадений в базе меньше нужного!


ну я же 13 элементов рассортировал в 21 ячейку wink.gif

Спустя 1 минута, 47 секунд (16.04.2012 - 13:56) Xpund написал(а):
Игорь_Vasinsky
Сори, но то что ты написал, для меня это тёмный лес huh.gif
А вот то, что написал walerus это понятнее biggrin.gif

Спустя 2 минуты (16.04.2012 - 13:58) Игорь_Vasinsky написал(а):
Цитата
`total`>=`location` ORDER BY RAND()
это то тебе зачем?

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

т.е. сначала данные в отсортированном виде, в остатках (не хватке - рандомым.)

Спустя 14 минут, 14 секунд (16.04.2012 - 14:12) Xpund написал(а):
Игорь_Vasinsky
Это просто дополнение, я не особо профессионал, но попрбую в твоих "иероглифах" разобраться, сделаю 2 варианта, посмотрю как работают оба варианта

Спустя 9 минут, 26 секунд (16.04.2012 - 14:22) walerus написал(а):
Сделай print_r( $result_array ); die();, перед "// Теперь твой код", и выложи что там у тебя.

Спустя 4 минуты, 52 секунды (16.04.2012 - 14:27) Игорь_Vasinsky написал(а):
иероглифы... ну спасибо.

там отчётливо видны настройки, а в цикле фокусы - чтобы сформировать таблицу нужных размеров по настройкам + заполнение пустых ячеек. tongue.gif

Спустя 14 минут, 30 секунд (16.04.2012 - 14:41) walerus написал(а):
Ну чего там с результатами?

Спустя 33 минуты, 5 секунд (16.04.2012 - 15:14) Xpund написал(а):
Array ( [0] => Array ( [0] => 1 [1] => Название [2] => Текст не более 120 символов! [3] => # [4] => 1000 [5] => 0 ) [1] => Array ( [0] => 2 [1] => Название [2] => Текст не более 120 символов! [3] => # [4] => 100 [5] => 0 ) )

Спустя 7 минут, 46 секунд (16.04.2012 - 15:22) walerus написал(а):
Цитата
Таблица 3. Константы выборки MySQL
константа описание
MYSQL_ASSOC Результат возвращается в ассоциативном массиве с индексами под именами колонок.
MYSQL_BOTH Результат возвращается в массиве, содержащем как численные индексы, так и индексы под именами колонок.
MYSQL_NUM Результат возвращается в массиве, содержащем численные индексы. Индексы стартуют с 0 (0 содержит первую колонку).


Сейчас у тебя стоит "MYSQL_NUM" - по этому и не находит по ключам ничего,
смени на MYSQL_ASSOC и проверь.

Спустя 43 минуты, 44 секунды (16.04.2012 - 16:06) Xpund написал(а):
walerus
Спасибо, помогло, большое спасибо всем.


_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
Быстрый ответ:

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