Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выбор случайных строк из таблицы MySQL
Форумы портала PHP.SU » » Вопросы новичков » Выбор случайных строк из таблицы MySQL

Страниц (1): [1]
 

1. Vitalka - 26 Мая, 2015 - 11:32:04 - перейти к сообщению
Доброго дня, уважаемые Гуру. Не откажите в помощи... Растерялся
Фирма проводит лотерею среди покупателей. Список участников в MySQL. Необходимо выбрать победителей путём выбора случайных строк из БД. Проблема не большая и реализована таким образом:
PHP:
скопировать код в буфер обмена
  1.     $num_rand = 5; // выбираем 5 случайных строк
  2.         $sql = "SELECT * FROM `ft_form_6` ORDER BY RAND() LIMIT " . $num_rand;
  3.      
  4.     if ($result = $mysql->query($sql)) {
  5.      
  6.        while ($row = $result->fetch_assoc()) {
  7.  
  8.         echo '<tbody><tr>';
  9.         echo '<td>' . $row['col_1'] . '</td>';
  10.         echo '<td>' . $row['col_2'] . '</td>';
  11.         echo '<td>' . $row['col_3'] . '</td>';
  12.         echo '<td>' . $row['col_4'] . '</td>';
  13.         echo '<td>' . $row['col_5'] . '</td>';
  14.         echo "</tr></tbody>";
  15.        }
  16.        $result->free();
  17.     }
  18.  


Вставляем в html
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. ...
  3.         <caption>Планшет ASUS</caption>
  4.         <thead>
  5.          <tr>
  6.          <br>
  7.         <th>Имя</th>
  8.         <th>Фамилия</th>
  9.         <th>Ел.почта</th>
  10.         <th>Телефон</th>
  11.         <th>Nr. чека</th>
  12.     </tr>
  13.         </thead>
  14.         <?php include_once("planset.php"); ?>
  15.                 </table>
  16.  


Эта схема работает... НО призов несколько. Т.е.
Главныйй приз -1шт,
2-й приз -5шт,
3-й приз -20шт,
4-й приз -100шт.

Сейчас в html прикркплены 4 php файла - 1-й случайным образом выбирает главного победителя, 2-й обадателей 2-го приза и т.д. Но случается, что строки повторяются Недовольство, огорчение Т.е. Иван Иванов выбран победителем гланого приза и в тоже время ему достаётся 4-йриз. (скрипты выбора работают независимо). Как избежать дублирования?
Думаю, что нужно случайным образом выбрать 126 строк (1+5+20+100), а затем разбить их по таблицам. Где в 1-й таблице одна строка, во 2-й - пять, в 3-й - двадцать, в 4-й - сто. Но ума не приложу как это сделать...
А может кто посоветует другое решение?

Спасибо
2. Tyoma5891 - 26 Мая, 2015 - 11:51:54 - перейти к сообщению
ну если пользоватеей хватает то например для 1 приза делать рандом из первіх 10 пользователей, для второго из 20 или 30 следующих и так далее..
3. Vitalka - 26 Мая, 2015 - 11:59:40 - перейти к сообщению
Tyoma5891 пишет:
ну если пользоватеей хватает то например для 1 приза делать рандом из первіх 10 пользователей, для второго из 20 или 30 следующих и так далее..

ИМХО не очень честно ... Улыбка
Всего ~1500 участников. Скорее подоша бы такая схема:
1-й приз - рандом из 1500 (=а)
2-й приз - рандом из 1500 - а (=b)
3-й приз - рандом из 1500 -(а+b)
...

Но как это реализовать и разнести по таблицам?
4. LIME - 26 Мая, 2015 - 12:05:29 - перейти к сообщению
Стооп стоп стоп
Устанете исключать победителей
Почему бы не выбрать столько случайных юзеров сколько всего призов
И потом распределить их по порядку выбранных
То есть первому выбранному первый приз
Следующим пяти второй итд
5. Vitalka - 26 Мая, 2015 - 13:04:16 - перейти к сообщению
LIME пишет:
Стооп стоп стоп
Устанете исключать победителей
Почему бы не выбрать столько случайных юзеров сколько всего призов
И потом распределить их по порядку выбранных
То есть первому выбранному первый приз
Следующим пяти второй итд

Всё верно, как вариант вполне годится. Выбираем 126 победителей. Дальше тупо по списку: 1-й -главный приз, 2-6 - второй приз, 7-27 - третий и т.д. Но как это всё красиво запихать в таблицу, чтобы между группами победителей хотя бы пустая строка была?
6. Tyoma5891 - 26 Мая, 2015 - 14:25:48 - перейти к сообщению
в цикле ставите метки через на которых заканчивается группа и ставится пробел...в данном случае 1, потом 6 27 и так далее...
7. Vitalka - 26 Мая, 2015 - 14:28:29 - перейти к сообщению
Tyoma5891 пишет:
в цикле ставите метки через на которых заканчивается группа и ставится пробел...в данном случае 1, потом 6 27 и так далее...

А можно поподробнее? Как это делается? Я в php пока ещё чайник Недовольство, огорчение
8. Tyoma5891 - 26 Мая, 2015 - 15:58:21 - перейти к сообщению
что-то типа такого:
PHP:
скопировать код в буфер обмена
  1. echo '<table border = "1">';
  2.    $del = '';
  3.    for($i = 0; $i < count($data); $i++){
  4.        if($i == 1 or $i == 6  or $i == 27){
  5.            $del .=  '<tr><td></td></tr>';
  6.        }
  7.      
  8.   $del .=  '<tr><td>'.$data[$i].'</td></tr>';
  9.    }
  10.   echo $del;
  11.    echo '</table>';

где $data Ваш массив победителей с БД
9. Vitalka - 26 Мая, 2015 - 16:26:22 - перейти к сообщению
Логика более-менее понятна. Спасибо! Буду пробовать.

З.Ы. к сожалению мало сообщений для отправки "Спасибо" Недовольство, огорчение

 

Powered by ExBB FM 1.0 RC1