[losowanie][mysql] losowanie rozne ale

0

Witam
mam kilka akcji na stronie typu
"select * from xxx where ddd=aaa order by rand() ";
i chcialbym
zeby te wszystkie funkcje
zwracaly tak samo porozrzucane obiekty np pierwsze wyswietli w roznej kolejnosci i te nastepne funkcje tez w takiejm

0

Tak jak chcesz to sie nie da, bynajmniej nie z uzyciem rand() w kazdym losowaniu. Kolejna sprawa - czy losowanie ma sie odbywac na tych samych danych, bo jesli tak to po co losowac kilka razy, latwiej zapamietac wynik i uzywac w roznym miejscu w skrypcie.

Jeśli chcesz losować rózne dane ale żeby ich kolejność np (po kolumnie ID była taka sama) to można tak:

$query = mysql_query('select id from pierwsza order by rand()');
$ids = array();
if(mysql_num_rows($query) > 0)
  while($row = mysql_fetch_assoc($query))
    $ids[] = $row['id'];

# w tablicy $ids mamy juz zapisana kolejnosc wyciagnietych danych
# zatem teraz wyciagamy inne zgodnie z nia:

$query2 = mysql_query('select * from druga');
if(mysql_num_rows($query2) > 0)
  while($row = mysql_fetch_assoc($query))
    $data[$row['id']] = $row;

# w tablicy $data mamy dane ale nieposortowane jak poprzednie, wiec w petli w innej tablicy je teraz ulozymy:

$data2 = array();
foreach($ids as $id){
    $data2[] = isset($data[$id]) ? $data[$id] : null;
    unset($data[$id]); # usuwajac juz przesortowane elementy
}

#ale jesli jeszcze cos pozostalo to dolaczamy to na samym koncu
if(count($data))
  foreach($data as $value)
    $data2[] = $value;

# i teraz w $data2 mamy tak samo posortowane elementy (te ktorych ID sie zgadzaja, te ktore sa dodatkowo znajduja sie w kolejnosci w jakiej byly wyciagane z bazy na koncu $data2

Powyższy kod daje takie same kolejności jeśli ilości danych w 2 roznych tablicach sie zgadzaja, jesli w drugiej tablicy nie ma takiego ID jak w pierwszej wstawiany jest typ NULL, a wszelkie dane z ID ktore nie wystepuja w pierwszej tabeli sa wstawiane na koncu.

Generalnie potrzeba Ci tylko kodu

$query = mysql_query('select id from pierwsza order by rand()');
$ids = array();
if(mysql_num_rows($query) > 0)
  while($row = mysql_fetch_assoc($query))
    $ids[] = $row['id'];

i w tablicy $ids masz juz ustalona kolejnosc, wedlug ktorej powinienes ustawiac inne dane, a te ktorych ID nie ma odpowiednika w $ids juz obslugiwac wg wlasnego pomyslu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1