Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowanie Rekordów
Forum PHP.pl > Forum > Bazy danych
vi-valdi
Mam dwie tabele books i books_bestlellers z polami:

Kod
books
------------------------------
id | ... | reszta danych | ...

books_bestsellers
-------------
id | id_books


bestsellerów może być dowolna ilość i skrypt sprawdza czy id_books jest = id i bardzo ładnie wyświetla wszystkie pozycje, które bestsellerami są.

A teraz chciałym żeby skrypt robił to jeszcze ładniej.
Chodzi o to żeby skrypt z całej listy bestsellerów wylosował np. 3 rekordy i tylko je wyświetlił.

Dozgonna wdzięczność za pomoc.
Parti
  1. SELECT * FROM tab ORDER BY rand() LIMIT 3
vi-valdi
Wielkie dzieki, oczywiście działa prawie jak ta lala.

Dozgonna wdzięczność, dozgonna wdzięczność, dozgonna wdzięczność.
Skasowałem trochę dozgonnej wdzięczności, bo działa dobrze ale nie super.

to
  1. $sql = "SELECT * FROM books ORDER BY rand() LIMIT 3 ";

działa,

ale jak powyższe dołożyć do poniższego
  1. $sql = "SELECT books.tytul_s, books.kod_okl, books_covers.nazwa_okl FROM books, books_news, books_covers WHERE books.id = books_news.id AND books_covers.kod_okl = books.kod_okl ORDER BY books.tytul_s";


Jeszcze raz wyedytuje posta, żeby sprawę uszczegółowić.
rand() limit 3 działa z moim zapytaniem sql ale tylko wtedy gdy pozbęde się pobierania rekordów w kolejności wg books.tytul_s
Parti
Jeśli dobrze rozumiem Twoje intencje, to chcesz wybrać 3 losowe rekordy, a następnie posortować je np. wg. tytułu. Stosuje się taki trick:

  1. (SELECT books.tytul_s, books.kod_okl, books_covers.nazwa_okl FROM books, books_news, books_covers WHERE books.id = books_news.id AND books_covers.kod_okl = books.kod_okl ORDER BY rand() LIMIT 3 )
  2. UNION
  3. (SELECT books.tytul_s, books.kod_okl, books_covers.nazwa FROM books, books_news, books_covers WHERE 1=0) ORDER BY books.tytul_s


Drugie zapytanie nie może zwrócić żadnego rekordu, stąd where 1=0.
vi-valdi
Nooooooooooo, teraz to działa super i dokładnie tak jak chciałem

Dzięki serdeczne.
comzit
Dlaczego to nie działa. Chcę po prostu wyświetlić dwa losowe rekordy a wyświetla mi dwa takie same.

  1. $za = "SELECT *
  2. FROM ko AS k JOIN pl AS p ON k.id = p.id WHERE costam= 'T' ORDER BY RAND() LIMIT 2 ";
SongoQ
@comzit Widocznie takie rokordy powstaly ze zlaczenia. Wydaje mi sie ze musza sie czyms roznic
comzit
  1. "SELECT *
  2. FROM kom ORDER BY RAND() LIMIT 2 ";


Czy takie zapytanie powinno zwrócić dwa rózne rekordy?.
kwiateusz
powinno smile.gif
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.