Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2014, 12:50   #1
s88s
Форумчанин
 
Регистрация: 02.01.2014
Сообщений: 369
Вопрос Перемешать базу данных ...

Доброго времени суток .

У меня есть база данных примерно такого вида

id

title

nick

и так далее ... в общем суть в чем мне надо сделать запрос такого вида что бы можно было все ячейки переставить местами то есть ID оставить как есть а вот все остальное что бы изменилось

Пример

как сейчас

1 текст1 ник1 ...
2 текст2 ник2 ...
3 текст3 ник3 ...
4 текст4 ник4 ...

а после запроса что бы стало так


1 текст2 ник2 ...
2 текст4 ник4 ...
3 текст1 ник1 ...
4 текст3 ник3 ...

и при каждом запросе все становилось рандомно .

вот у меня есть один запрос но он не работает :

Код:

<?php


if (!defined('Q_COMMON')) exit('stop');

$error = test_db_connect();

if ($error) {
	test_print_error($error);
	exit;
}

/************************************************/
/* Processing */

$res = mysql_query('SELECT count(*) AS cnt FROM '.MYSQL_TABLE_PREFIX.'test LIMIT 1');
list ($count) = mysql_fetch_array($res);
mysql_free_result($res);

$ind = $count*10;

$res = mysql_query('SELECT id, last_use FROM '.MYSQL_TABLE_PREFIX.'test');



while ($row = mysql_fetch_array($res)) {
    $new_date = date("Y-m-d H:i:s", time()-rand(100, $ind));
    $sql = 'UPDATE '.MYSQL_TABLE_PREFIX.'test SET last_use="'.$new_date.'" WHERE id='.$row['id'];
    if(!mysql_query($sql)) {
        echo '<br>'.mysql_error();
        exit();
    }
}
?>
Помогите пожалуйста
"Я не волшебник, я только учусь"
s88s вне форума Ответить с цитированием
Старый 28.02.2014, 14:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ух ты. Зачем такое неожиданное обновление? Могу пример для MS SQL нарисовать, для MySQL слабо, поскольку использую временные таблицы и курсоры. Как в MySQL с этим могу только догадываться. В таблице Id и наименование, которое случайно тасую
Код:
SELECT * INTO #MyTable1 FROM MyTable ORDER BY Id
SELECT * INTO #MyTable2 FROM MyTable ORDER BY NEWID()
DECLARE @Id smallint,
        @Naim varchar(30)
DECLARE Cursor1 CURSOR FOR SELECT Id FROM #MyTable1
OPEN Cursor1
FETCH NEXT FROM Cursor1 INTO @Id
DECLARE Cursor2 CURSOR FOR SELECT Naim FROM #MyTable2
OPEN Cursor2
FETCH NEXT FROM Cursor2 INTO @Naim
WHILE @@FETCH_STATUS=0 BEGIN
  UPDATE MyTable SET Naim=@Naim WHERE Id=@Id
  FETCH NEXT FROM Cursor1 INTO @Id
  FETCH NEXT FROM Cursor2 INTO @Naim
END
CLOSE Cursor1
DEALLOCATE Cursor1
CLOSE Cursor2
DEALLOCATE Cursor2
В принципе можно и без временных таблиц, но без курсоров не придумал как обойтись
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.02.2014 в 14:11.
Аватар вне форума Ответить с цитированием
Старый 28.02.2014, 14:50   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Ух ты. Зачем такое неожиданное обновление?
подозреваю что ТС всего навсего надо достать(!) N случайных записей из ....
ну и пронумеровать их.
Цитата:
1 текст2 ник2 ...
2 текст4 ник4 ...
3 текст1 ник1 ...
4 текст3 ник3 ...

и при каждом запросе все становилось рандомно .
веселее всего окажется если среди ID не окажется 1. хотя при его вольготном обращении c ID... такого просто не может быть.

Код:
mix;
select top N  
id as num, .... from ... order by id
Код:
select newid() as r, * into #t from t
select top N
(select count(*) from #t as mix where mix.r<t.r) as num
, * from #t as t order by t.r
Код:
select newid() as r, id into #t from t
select top N
(select count(*) from #t as mix where mix.r<t.r) as num,   b.* 
from #t as t
inner join b on t.id=b.id
as t order by t.r
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.02.2014 в 14:54.
evg_m вне форума Ответить с цитированием
Старый 28.02.2014, 16:12   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
и при каждом запросе все становилось рандомно
Точно, перемудрил. Читать посты нужно внимательней
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение данных из Edit в базу данных (не Access) Denis3 БД в Delphi 5 18.03.2013 16:45
занести в базу данных josik Помощь студентам 0 28.11.2012 03:40
Задание на базу данных BomaN1 Visual C++ 10 14.12.2011 21:43
tstringlist - перемешать строчки paravoz1k Общие вопросы Delphi 5 18.08.2011 00:11
перемешать listbox nevru1bphp Общие вопросы Delphi 2 15.10.2010 09:20