[MySQL][PHP]Rand bez częstych powtórzeń |
[MySQL][PHP]Rand bez częstych powtórzeń |
26.04.2020, 17:24:10
Post
#1
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 8 Dołączył: 7.07.2007 Skąd: Tychy Ostrzeżenie: (0%) |
Cześć.
Chce zrobić rotator banerów na mojej stronie, ale mam jedną zagwozdkę. RAND() rozwiązałoby problem, ale jeśli mam np. 3 rekordy w bazie to może rand losować mi cały czas jeden rekord lub "częściej" a ja chciałbym aby mi losował wszystkie banery w miarę po równo. Kombinuję aby losował mi ORDER BY RAND(), wylosowany rekord otrzyma np. rekord do bazy `rander`=1, zapytanie losuje rekordy where `rander`=0 wiec każdy baner w bazie zostanie wyświetlony raz, ale jak zapełnię we wszystkich rekordach `rander` na 1... to jak potem odwrócić aby z kolei szukał po `rander` = 1 i po wyciągnięciu rekordu zmieniał `rander`= 0 i tak w kółko ? Da się tak to zaprogramować? Nie wiem czy dobrze wytłumaczyłem o co mi chodzi:) -------------------- Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU! |
|
|
26.04.2020, 17:47:01
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 440 Pomógł: 6290 Dołączył: 27.12.2004 |
Cytat Da się tak to zaprogramować? Dodajesz pole w bazie, ustawiasz na 1 gdy sie wylosuje a losujesz tylko z rekordow co maja to pole 0. W czym problem? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
26.04.2020, 18:24:38
Post
#3
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 8 Dołączył: 7.07.2007 Skąd: Tychy Ostrzeżenie: (0%) |
No ale jak dam pole na 1 to kiedyś się skończą pola 0
Jak zrobić inteligentne zapytanie aby wybierało pola 0 a jak te się skończą to przeszło do pola 1? Na razie mam taka funkcję, pośrednio działa, niestety nalicza mi co dwa disp- i nie wiem dlaczego
Ten post edytował miccom 26.04.2020, 18:30:49 -------------------- Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU! |
|
|
26.04.2020, 18:31:38
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Kiedy skończą się pola "0", to wiesz, że masz ustawić ponownie wszystkie na "0".
Jeśli nie zależy Ci na takiej samej losowości u każdego użytkownika, to: 1. Wybierz wszystkie bannery, przetasuj je i zapisz w sesji. 2. Podczas wyświetlania wybierz pierwszy z tablicy i usuń. 3. Kiedy tablica będzie pusta, to wracasz do 1. -------------------- |
|
|
4.06.2020, 19:34:37
Post
#5
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 8 Dołączył: 7.07.2007 Skąd: Tychy Ostrzeżenie: (0%) |
No dureń jestem
Niepotrzebnie zajmuję się pierdołami:) Przecież mogę wybierać rekord ORDER BY disp ASC i będzie mi wybierał zawsze rekord z najmniejszym disp czyli nawet jak będą dwa banery- to będą się wyświetlać raz jeden a raz drugi:) Czyż nie tak? Ale mimo to, nadal dodaje mi po dwa disp... choć w kodzie jest Choć jednak nie jest to takie piękne ;/ Jak zaplanować zapytanie, aby losowało mi z bazy danych banery które mają ustawiony rekord np. display = 0, każdemu wyświetlonemu zapisujemy display=1, a jak te z display=0 się skończą to zapytanie wyszuka display = 1 a po wyświetleniu zapisze display=0, i dopiero jak wszystkie zostaną wyświetlone z display=1 to znowu wracamy do display=0 ? Najprościej myślę, żeby sprawdzić ile jest rekordów z wartością display = 0, i jeśli są większe niż 0 to losować baner WHERE display = 0, jeśli nie będzie już tych z display=0- to losować z display=1 Ale wtedy z kolei jak raz zmienimy na display=1... to w kółko będą się wyświetlać dwa banery Macie jakieś propozycje jak nie powtarzać banerów? Ten post edytował miccom 26.04.2020, 18:44:41 -------------------- Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU! |
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 12:46 |