Моё меню Общее меню Пользователи Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > IT-индустрия > Софт > Программирование > Веб программирование
Знаете ли Вы, что ...
...до того как открыть новую тему, стоит использовать поиск: такая тема уже может существовать.
<< Предыдущий совет - Случайный совет - Следующий совет >>

Веб программирование Вопросы WEB программирования (Java Script и т.д.)


Ответить

 
Опции темы Опции просмотра
Старый 04.03.2016 00:07   #1  
Аватар для kelt
Оффлайн
Павлин
Сообщений: 2,263
+ 594  458/337
– 1,250  976/401

Switzerland
Выбор случайной записи и запись ее в другую таблицу

Есть база mysql с таблицей usertbl.
Нужно выбрать из нее случайную 1 запись из поля username. Далее полученное значение записать таблицу uch в поле username значение с выше и в поле date текущую дату. Как реализовать это на php? В гугле нет похожего решения.
Ответить 
Старый 04.03.2016 08:36   #2  
Аватар для shumbola
Оффлайн
Сообщений: 3,327
+ 337  892/590
– 3  31/25

Uzbekistan
Цитата:
Сообщение от kelt Посмотреть сообщение
Есть база mysql с таблицей usertbl.
Нужно выбрать из нее случайную 1 запись из поля username. Далее полученное значение записать таблицу uch в поле username значение с выше и в поле date текущую дату. Как реализовать это на php? В гугле нет похожего решения.
В гугле миллион + тележка решений. :-)
Надеюсь, не просите написать рабочий код, а только подсказку. :-)

Так как, почти ничего не известно о структуре бд, предложу универсальный вариант:
0. будем считать, что кол-во записей не меняется во время операций с бд
1. находим кол-во записей, select count(*) from usertbl
2. используя встроенную функцию php rand($min, $max) (либо mt_rand($min, $max) или других), выберем случайное число $r в диапазоне [1-кол-во записей]
3. делаем выборку из таблицы, select username from usertbl limit $r, 1
4. записываем в таблицу uch, insert into uch(username, date) values($username, current_date)

-лучше использовать в качестве названия колонки что-то другое чем date
-лучше сделать это в stored procedure в mysql
-и т.д.
__________________
404 Not Found
Ответить 
Старый 04.03.2016 11:25   #3  
Аватар для kelt
Оффлайн
Павлин
Сообщений: 2,263
+ 594  458/337
– 1,250  976/401

Switzerland
<?

$schetchikrow = (mysql_query('SELECT COUNT(*) FROM usertbl;');
$zapros1 = array();
while (count($zapros1) < 1) {
$zapros1[] = '(SELECT * FROM usertbl LIMIT '.rand(0, $schetchikrow).', 1)';
}
$res = mysql_query($zapros1);
mysql_query("insert into uch(username, dennj) values($username, current_date)");
print mysql_query(SELECT *, FROM uch)

?>

Накинул такой код, но ничего не происходит.

Последний раз редактировалось kelt; 04.03.2016 в 11:39.
Ответить 
Старый 04.03.2016 13:09   #4  
Real ID Group
Аватар для Aziz Madetov
Оффлайн
Сообщений: 1,504
+ 3,004  1,175/528
– 55  21/17

Uzbekistan
Код:
$schetchikrow = (mysql_query('SELECT COUNT(*) FROM usertbl;');
У вас скобка не закрыта.

Такую выборку можно выполнить с помощью одного SQL-запроса, а в PHP передать результат.
Ответить 
Старый 04.03.2016 13:15   #5  
Аватар для Фёдор
Оффлайн
Сообщений: 702
+ 99  466/226
– 17  93/54

Uzbekistan
kelt, УЖОС!

Один запрос.
Код:
INSERT INTO uch (username, date) VALUES ((SELECT username FROM usertbl ORDER BY RAND() LIMIT 1), TIME)
Ответить 
Старый 04.03.2016 13:47   #6  
Аватар для shumbola
Оффлайн
Сообщений: 3,327
+ 337  892/590
– 3  31/25

Uzbekistan
Цитата:
Сообщение от Фёдор Посмотреть сообщение
kelt, УЖОС!

Один запрос.
Код:
INSERT INTO uch (username, date) VALUES ((SELECT username FROM usertbl ORDER BY RAND() LIMIT 1), TIME)
kelt учиться, поэтому step-by-step.
__________________
404 Not Found
Ответить 
Старый 04.03.2016 14:43   #7  
Аватар для shumbola
Оффлайн
Сообщений: 3,327
+ 337  892/590
– 3  31/25

Uzbekistan
kelt, остерегайтесь использовать одно-строчные запросы не разбиравшись, иначе пойдут вопросы типа а почему это медленно и т.д.
__________________
404 Not Found
Ответить 
Реклама и уведомления
Старый 04.03.2016 15:03   #8  
Аватар для kelt
Оффлайн
Павлин
Сообщений: 2,263
+ 594  458/337
– 1,250  976/401

Switzerland
Фёдор, шикарный запрос в SQL
INSERT INTO uch (username, dennj) VALUES ((SELECT username FROM usertbl ORDER BY RAND() LIMIT 1), current_date)

Только как этот запрос выполнить средствами php?
Попробовал это
<?php mysql_query("INSERT INTO uch (username, dennj) VALUES ((SELECT username FROM usertbl ORDER BY RAND() LIMIT 1), current_date)");
?>

Ничего не происходит. Соединение с базой есть, но ничего не происходит.

Последний раз редактировалось kelt; 04.03.2016 в 15:06.
Ответить 
Старый 04.03.2016 15:05   #9  
Аватар для kelt
Оффлайн
Павлин
Сообщений: 2,263
+ 594  458/337
– 1,250  976/401

Switzerland
shumbola, в базе около 120тыс записей. Сама база дала результат через 2 секунды. Случайная выборка будет происходить каждый день в 00,05 по времени сервера, т.е. 1 раз в сутки. Осталось только решить вопрос как это реализовать на php.
Ответить 
Старый 04.03.2016 15:48   #10  
Аватар для kelt
Оффлайн
Павлин
Сообщений: 2,263
+ 594  458/337
– 1,250  976/401

Switzerland
Код сейчас выглядит так, почему не добавляется случайная запись из таблицы usertbl в таблицу uch?
Сам код
Цитата:
<?php
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "userlistdb");

$con = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die("Cannot select DB");

mysql_query("INSERT INTO uch (username, dennj) VALUES ((SELECT username FROM usertbl ORDER BY RAND() LIMIT 1), current_date)",$con);

$qr_result = mysql_query("select * from " . uch)
or die(mysql_error());

echo '<table border="1">';
echo '<thead>';
echo '<tr>';
echo '<th>id</th>';
echo '<th>number</th>';
echo '<th>datenj</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';


while($data = mysql_fetch_array($qr_result)){
echo '<tr>';
echo '<td>' . $data['id'] . '</td>';
echo '<td>' . $data['username'] . '</td>';
echo '<td>' . $data['dennj'] . '</td>';
echo '</tr>';
}

echo '</tbody>';
echo '</table>';


?>
Ответить 
Ответить
Опции темы
Опции просмотра




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх