Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Mieszanie identyfikatorow unikalnymi liczbami po kolei
Forum PHP.pl > Forum > Przedszkole
ornitolog
Mam baza z pare do parudziesieciu tysiecy produktow z kolumna `id` (auto_increment od 1 do X). Teraz musze stworzyc kolejna kolumne z losowym identyfikatorem id_losowe, ale nie moze byc RAND(), musi byc losowa liczba ale od 1 do X, czyli np.
produkt id=1 bedzie mial id_losowe=231
produkt id=2 bedzie mial id_losowe=8721
produkt id=3 bedzie mial id_losowe=21
Zrobiłem tak:
Kod
$numbers = range(1, $ilosc_produktow);
shuffle($numbers);
$ids = $this->pobierz_id_wszystkich_produktow();
foreach($ids as $id => $dane){
    $id_wylosowane = array_shift($numbers);
    update `'.$this->nazwa_bazy.'` set `id_losowe`= "'.$id_wylosowane.'" where `id`='.$id.' limit 1
}


ale zapytanie wykonuje sie za dlugo. Moze da sie to zrobic przez mysql zeby pobral wszystkie id jakie sa i przypisal je do id_losowe ale zeby sie nie powtarzaly, mam nadzieje ze nie zamotalem za bardzo.
trueblue
Czy zawsze produkt o id=1 będzie mieć id_losowe=231?

Możesz utworzyć tabelę z dwiema kolumnami (id, id_losowe) i zrobić UPDATE korzystając z dwóch tabel spiętych po id.
ornitolog
Właśnie nie, chodzi o to ze
id = 1, id_losowe = X
id = 2, id_losowe = Y
id = 3, id_losowe = Z
w sensie beda one losowe, ale tylko z przedzialu od 1 do max(`id`) i musza byc unikalne
viking
http://stackoverflow.com/questions/6550155...ween-two-values
Ostatnia odpowiedz na przykład. Rzeźbienie w PHP nie ma sensu.
mmmmmmm
http://sqlfiddle.com/#!9/4d2de/2
Crozin
Pozwolę sobie zapytać: a w jakim celu w ogóle chcesz coś takiego zrobić? Wydaje się to być dosyć nietypową konstrukcją/strukturą.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.