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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор случайных строк из таблицы MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Скрипт для проведения лотереи
Vitalka
Отправлено: 26 Мая, 2015 - 11:32:04
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Доброго дня, уважаемые Гуру. Не откажите в помощи... Растерялся
Фирма проводит лотерею среди покупателей. Список участников в 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-й - сто. Но ума не приложу как это сделать...
А может кто посоветует другое решение?

Спасибо
 
 Top
Tyoma5891
Отправлено: 26 Мая, 2015 - 11:51:54
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




ну если пользоватеей хватает то например для 1 приза делать рандом из первіх 10 пользователей, для второго из 20 или 30 следующих и так далее..
 
 Top
Vitalka
Отправлено: 26 Мая, 2015 - 11:59:40
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Tyoma5891 пишет:
ну если пользоватеей хватает то например для 1 приза делать рандом из первіх 10 пользователей, для второго из 20 или 30 следующих и так далее..

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

Но как это реализовать и разнести по таблицам?
 
 Top
LIME
Отправлено: 26 Мая, 2015 - 12:05:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Стооп стоп стоп
Устанете исключать победителей
Почему бы не выбрать столько случайных юзеров сколько всего призов
И потом распределить их по порядку выбранных
То есть первому выбранному первый приз
Следующим пяти второй итд
 
 Top
Vitalka
Отправлено: 26 Мая, 2015 - 13:04:16
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




LIME пишет:
Стооп стоп стоп
Устанете исключать победителей
Почему бы не выбрать столько случайных юзеров сколько всего призов
И потом распределить их по порядку выбранных
То есть первому выбранному первый приз
Следующим пяти второй итд

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


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




в цикле ставите метки через на которых заканчивается группа и ставится пробел...в данном случае 1, потом 6 27 и так далее...
 
 Top
Vitalka
Отправлено: 26 Мая, 2015 - 14:28:29
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Tyoma5891 пишет:
в цикле ставите метки через на которых заканчивается группа и ставится пробел...в данном случае 1, потом 6 27 и так далее...

А можно поподробнее? Как это делается? Я в php пока ещё чайник Недовольство, огорчение
 
 Top
Tyoma5891
Отправлено: 26 Мая, 2015 - 15:58:21
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




что-то типа такого:
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 Ваш массив победителей с БД

(Отредактировано автором: 26 Мая, 2015 - 16:11:48)

 
 Top
Vitalka
Отправлено: 26 Мая, 2015 - 16:26:22
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Логика более-менее понятна. Спасибо! Буду пробовать.

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

(Отредактировано автором: 26 Мая, 2015 - 16:28:23)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB