Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Selekcja dostepnych rekordow i wybranie losowo jednego
Forum PHP.pl > Forum > Bazy danych > MySQL
lexis72
Witam chciałbym Was prosić o pomoc w przygotowaniu zapytania które na podstawie sprawdzenia warunków pobierałoby liste dostępnych rekordów i losowo wyświetlalo jeden z nich. Baza bedzie dosc duza i zawierala kilkaset tekstow (kolumna 2) i kilkadziesiat warunkow (kolumny od 3 dalej). Na zdjeciu zamieszczam pogladowo wycinek z takiej bazy. Chodzi o to ze gdy user wejdzie na stronie to system na podstawie uzupelnienionego przez niego profilu sprawdzi jakie teksty sa dla niego mozliwe i wyswietli jeden losowy. Czy ktos ma pomysl jak powinno wygladac do tego zapytanie bo poczatkowo wydawalo mi sie to proste ale okazalo sie ze moje przewidywania sie nie sprawdzily i teraz stoje...

sazian
ORDER BY RAND()
Pyton_000
Robisz sobie SELECT danych jakich chcesz a w aarunku WHERE robisz subquery które pobierze tylko kolumnę ID i to na niej zrobi order BY RAND() i dodatkowe warunki dla których ma byc wyszukany wpis
lexis72
Troszeczke zle wytlumaczylem istote problemu. Nie jest nią bynajmniej wybranie losowego rekordu ale znalezienie sposobu na napisanie zapytanie ktore poradziloby sobie z taka historią:

Wchodzi sobie na stronie user_id=80 który w swoim profilu w tabeli USERS wpisal ze ma krotkie włosy, jest z warszawy, ma 15 lat i lubi pływać.

Na podstawie tych danych na stronie powinien ukazac mu sie tekst B i C.

Jedynki w tej tabeli oznaczaja ze ten warunek musi byc spelniony aby tekst sie wyswietlil, zera oznaczaja ze ten warunek nie ma znaczenia czyli bez wzgledu na to co ma uzytkownik w swoim profilu w tej kolumnie nie bedzie to mialo znaczenia przy pobieraniu tego tekstu.

Czyli trzeba pobrac z tabeli USERS wiersz o ID=80 i porownac go jak ukladanke z kazdym tekstem
Czy ktos wie jak to zrobic?

EDIT:// Wydaje sie ze przy kazdym tekscie baza powinna sprawdzic jakie warunki sa wymagane i sprawdzic ich zasadnosc ale pytanie w jaki sposob? Czy przygotowac osobna liste wszystkich mozliwych warunkow i tylko je przyporzadkowywac? Bo przeciez nie ma jednej mozliwosci podania warunkow bo w kazdym tekscie inne warunki sa wymagane.... A przypominam ze to tylko wycinek bazy ktora docelowo ma miec kilkaset wierszy (tekstow) i okolo kilkadziesiat kolumn(warunkow). Wiec traktowanie kazdego tekstu jako osobnego selecta raczej odpada.

Ma ktoś jakiś pomysł?
aras785
Nie wiem czy dobrze rozumiem ale chodzi Ci o "użytkowników podobnych" questionmark.gif

Czyli Ci są z warszawy, lubią pływać i mają 18 lat?


Jeśli tak to załatwisz to: having + limit + rand i gitara wink.gif


Pozdrawiam
lexis72
No ale w jaki sposob sformuujesz warunek HAVING skoro kazdy uzytkownik nie dosc ze ma inaczej uzupelnione pola w profilu to jeszcze jeden ma uzupelnione np pole o dlugosci wlosow a drugi uzupelnil sobie miejsce zamieszkania. Problem w tym ze warunki sa inne dla kazdego uzytkownika ktory wejdzie na strone.

Pominmy narazie wybieranie jednego losowego tekstu. Niech pokaza sie wszystkie spelniajace warunki dla danego uzytkownika.

Wchodzi sobie na stronie user_id=80 który w swoim profilu w tabeli USERS wpisal ze ma krotkie włosy, jest z warszawy, ma 15 lat i lubi pływać. Powinny mu sie ukazac teksty B i C.

Jaki powinno wygladac do tego zapytanie? Ktos dokonczy:

  1. SELECT tekst FROM teksty WHERE ...
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.