Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Select z specyficznym warunkiem
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

Potrzebuję odpytać bazę w specyficzny sposób (jak dla mnie, bo może jest to proste...). Mam przykładowo takie dane w bazie (id / wartosc)

1 - wartosc a
2 - wartosc b
3 - wartosc c
4 - wartosc d
5 - wartosc e

I teraz potrzebuję, aby wartość rekordu pierwszego była zawsze pierwsza w wynikach selecta, a pozostałe muszą się rotować. Próbowałem na kilka sposób, ale ostatecznie stanęło na dwóch zapytaniach (przykład uproszczony)

  1. $result1 = mysql_query("SELECT * FROM tabela WHERE id='1' LIMIT 1") or die(mysql_error());
  2. $row1 = mysql_fetch_array($result1);
  3.  
  4. $result2 = mysql_query("SELECT * FROM tabela WHERE id!='".$row1['id']."' ORDER BY RAND()") or die(mysql_error());
  5. while($row2 = mysql_fetch_array($result2)){
  6.  
  7. }


Mam jednak potem delikatny problem z wyświetlaniem wyników więc chciałbym to jakoś uprościć, najlepiej do 1 zapytania. Ale nie wiem czy nie za dużo sobie wymyśliłem. Jeśli ktoś może mi podpowiedzieć jakieś rozwiązanie to będę dźwięczny. Pozdrawiam, Ł.
Crozin
Musisz w kryteriach sortowania podać dokładnie taki warunek jak opisałeś czyli:
  1. SELECT * FROM tbl ORDER BY id = 1 DESC, RAND()
PS. Jeżeli masz tabelę nawet niedużych rozmiarów takie sortowanie wg RAND-a może znacząco spowalniać zapytanie.
Damonsson
Yyy, albo źle zrozumiałem, albo chodzi Ci o:

  1. SELECT * FROM tabela ORDER BY id = '1' DESC, RAND()
lukash82
ooo właśnie, o to chodziło. Czasem się człowiek zawiesi, pokręci i kombinuje za dużo.

Rekordów jest raptem ze 40 więc chyba nie ma katastrofy. Chyba, że jest lepszy sposób na to?

Dzięki za pomoc.
Damonsson
Jak będziesz miał z ~10.000 to możesz się martwić ORDER BY RAND()
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.