X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Выборка нужных ИД из БД
Karamba_hb
Karamba_hb
Topic Starter сообщение 25.3.2012, 14:49; Ответить: Karamba_hb
Сообщение #1


Делаю так, Селектит все строки у пользователя $user
[PHP]$res = mysql_query('select * from user_anekdot ua where ucase(ua.name)=ucase({$user})');[/PHP]

Потом записываем количество полученный строк в переменную:
[PHP]$summ_user = mysql_num_rows($res)[/PHP]

................................
Потом нужно чтобы у пользователя шёл отбор на стороне клиента а не базы данных(чтобы нагрузки было а базу поменьше), тоесть если в строке пользователя имеется в поле flag=0 то запомнить ид этой строки. а потом вывести случайный запомненный ид там где flag=0
Пример: у пользователя проселектились строки с ид=1, 5, 6, 8 и 10. Из всех этих строк, flag=0 только у строк с ид=5, 8 и 10. И вывести случайный ид из 5, 8 или 10. При нажатии на кнопку например вывело число 5, далее снова при нажатии на кнопку 5 уже вывестись несможет, только 8 или 10. Например вывелось 10, естественно при следующем клике выведется последнее число 8. А и ещё, при каждом клике, в базу данных должно идти упдате flag=1 тому ид, которое показалось, тоесть тому которое вывело скрипт.
Такое решил сделать по той причине что будет большая нагрузка к БД если по 100 раз селектить базу.
Для того чтобы по 100 раз не селектить базу надо записывать все данные пользователя в яваскрипте, а всё остальное можно в пхп
...........................
А вот что я чтото пытался делать с помощью друга, но это походу не то, а на практике работает он не так как надо(((
[PHP]$qwe = array();
while($row=mysql_fetch_array($res)){
$qwe[]=$row;
}

$arr_flag0 = array();
for($i=0;$i<$summ_user;$i++) {
if($qwe[$i]['flag']==0) $arr_flag0.push($i);
}
$count_arr_flag0 = count($arr_flag0);
$rand_num = rand(0,$count_arr_flag0);
$id_res = $qwe[$rand_num]['id'];[/PHP]

Помогите пожалуйста реализовать эту вещь))
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DelphinPRO
DelphinPRO
сообщение 25.3.2012, 16:27; Ответить: DelphinPRO
Сообщение #2


[PHP]$res = mysql_query('SELECT * FROM user_anekdot ua WHERE ucase(ua.name)=ucase({$user}) AND ua.flag = 0');
while($row=mysql_fetch_array($res)){
$qwe[]=$row;
}
// имеем массив со сброшенными флагами
// далее перемешиваем массив
shuffle($qwe);
// и извлекаем первый элемент
$rand = array_shift($qwe);
// массив при этом уменьшается на один элемент, и он больше в массиве не присутствует
// остается только апдейтнуть запись в таблице
mysql_query('UPDATE ua SET flag = 1 WHERE ua.id = $rand[id]'); // кавычки сам расставишь
// вот собственно и все.[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 25.3.2012, 16:45; Ответить: Karamba_hb
Сообщение #3


ага спасибо, но тут при нажатии кнопки некст (выборки нового ид без флага и упдате в бд флага ) происходит снова селект, тоесть каждый раз будет обновляться страница и идти запрос в бд на селект.
А мне нужно чтобы упдате и кнопка была через яваскрипт динамическая, тоесть ид где флаг=0 записывался в яваскрипте на ффлаг=1 и флаг=1 шёл в бд упдате динамически, тоесть чтобы страница не обновлялась и лишний селект не шёл в бд.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DelphinPRO
DelphinPRO
сообщение 25.3.2012, 18:16; Ответить: DelphinPRO
Сообщение #4


тогда аналогичный функционал следует сделать на Javascript/
т.е. после выборки все данные отдаются на страницу, яваскриптом выдергивается случайный элемент, и аяксом отправляется запрос на обновление флага.
в яваскрипт я не очень рублю, как сделать случайную выборку из массива - так сразу не подскажу.
Отправка аякс запроса на jQuery
[JS]$.get('handler.php?id='+rand[id]+'&flag=1', function(responce){alert('OK')});[/JS]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 25.3.2012, 18:31; Ответить: alexdrob
Сообщение #5


если бы TC не плодил темы а продолжал одну, то было бы понятней что ему нужно.
но круче же создать 10 тем :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 25.3.2012, 18:33; Ответить: Karamba_hb
Сообщение #6


DelphinPRO,чтото я непонимаю что этот Jquery делает))

alexdrob,ну тут уже яваскрипт надо подключать, поэтому и создал тему в яваскрипте)) а т тему почемуто ты забросил))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DelphinPRO
DelphinPRO
сообщение 25.3.2012, 19:07; Ответить: DelphinPRO
Сообщение #7


обычный аякс запрос методом GET на страницу handler.php в которой должен быть код обновления флагов в БД.
т.е. запрос к серверу будет выполнен в фоновом режиме, без перезагрузки страницы.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 25.3.2012, 19:19; Ответить: Karamba_hb
Сообщение #8


Я так понял что это далжно быть на моей странице[PHP]$res = mysql_query('SELECT * FROM user_anekdot ua WHERE ucase(ua.name)=ucase({$user}) AND ua.flag = 0');while($row=mysql_fetch_array($res)){ $qwe[]=$row;}[/PHP][JS]$.get('handler.php?id='+rand[id]+'&flag=1', function(responce){alert('OK')});[/JS]

А это уже на странице handler.php которая будет подгружаться?

[PHP]$res = mysql_query('SELECT * FROM user_anekdot ua WHERE ucase(ua.name)=ucase({$user}) AND ua.flag = 0');while($row=mysql_fetch_array($res)){ $qwe[]=$row;} shuffle($qwe);$rand = array_shift($qwe);mysql_query('UPDATE ua SET flag = 1 WHERE ua.id = $rand[id]');
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DelphinPRO
DelphinPRO
сообщение 25.3.2012, 19:44; Ответить: DelphinPRO
Сообщение #9


index.php
[PHP]<?php
// выбрать записи со сброшенными флагами
$res = mysql_query('SELECT * FROM user_anekdot ua WHERE ucase(ua.name)=ucase({$user}) AND ua.flag = 0');
while($row=mysql_fetch_array($res)){
// формируем яваскрипт массив
$js .= 'massiv[] = ' . $row['id'] . ";\n";
}
?>
<!-- выводим массив -->
<sctipt>
var massiv = array();
<?php echo $js; ?>
</script>
<button onclick="updateFlag()">NEXT</button>
<sctipt>
function updateFlag(){
var id = getRandItem();
$.get('handler.php?id='+id+'&flag=1', function(responce){alert('OK')});
}

function getRandItem(){
// эта функция должна выбирать случайный элемент массива massiv
// убирать этот элемент из массива и возвращать ID
}
</script>[/PHP]
handler.php
[PHP]$id = $_GET['id'];
$flag = $_GET['flag'];
mysql_query('UPDATE ua SET flag = $flag WHERE ua.id = $id'); [/PHP]

данный код возможно не заработает как есть, он лишь отображает общую идею. Ну и проверки для безопасности следует тоже добваить.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 25.3.2012, 20:37; Ответить: Karamba_hb
Сообщение #10


а тут что писать в функции?))
function getRandItem()
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужна выборка из базы пастухова
2 aleggator 2198 2.3.2017, 15:19
автор: aleggator
Открытая тема (нет новых ответов) автоматическая активация нужных <input type="radio">
1 FALKOR 3673 19.5.2016, 17:18
автор: -Valeron-
Открытая тема (нет новых ответов) Выборка ключевых слов. База почти 2 млрд.
200р./ выборка
19 zhurik 16184 21.10.2015, 8:29
автор: zhurik
Открытая тема (нет новых ответов) Выборка по базе ключевых слов
3 aleggator 2111 20.8.2015, 12:29
автор: metvekot
Открытая тема (нет новых ответов) Требуется выборка из базы Пастухова
5 frion-seo 4055 20.1.2015, 22:58
автор: Вентилятор


 



RSS Текстовая версия Сейчас: 25.4.2024, 22:12
Дизайн