Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Mieszanie identyfikatorow unikalnymi liczbami po kolei
ornitolog
post 15.06.2016, 12:35:01
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 20.12.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post 15.06.2016, 13:11:36
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
ornitolog
post 15.06.2016, 13:36:35
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 20.12.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
viking
post 15.06.2016, 13:46:02
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/questions/6550155...ween-two-values
Ostatnia odpowiedz na przykład. Rzeźbienie w PHP nie ma sensu.


--------------------
Go to the top of the page
+Quote Post
mmmmmmm
post 15.06.2016, 13:48:25
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


http://sqlfiddle.com/#!9/4d2de/2
Go to the top of the page
+Quote Post
Crozin
post 15.06.2016, 15:51:31
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Pozwolę sobie zapytać: a w jakim celu w ogóle chcesz coś takiego zrobić? Wydaje się to być dosyć nietypową konstrukcją/strukturą.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:51