Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nietypowy select
Forum PHP.pl > Forum > Bazy danych > MySQL
maciu
tabela

id id_akcja
1 1
2 1
3 2
4 3
5 1
6 4

i teraz chcę wyciągnąć 2 rekordy, gdzie id_akcja=1, i 3 dowolne inne rekordy (ale różne od tych wybranych w pierwszym kroku). Czy da się to wykonać w jednym zapytaniu?
Cezar708
nie mam pojęcia czy o to Ci chodzi...
  1. SELECT * FROM tabela WHERE id_akcja=1
  2. UNION
  3. SELECT * FROM tabela WHERE id_akcja<>1 LIMIT 3
maciu
prawie o to mi chodzi, ale dziękuje, że mnie naprowadziłes

  1. (SELECT * FROM tabela WHERE id_akcja=1 LIMIT 2 )
  2. UNION
  3. (SELECT * FROM tabela) ORDER BY id DESC LIMIT 5


wynik jest taki jaki oczekiwałem, tylko chciałbym jeszcze, aby rekordy były posortowane w taki sposób, aby rekordy zwrócone przez pierwszy select były na szczycie wyników
Cezar708
klauzura ALL
  1. (SELECT * FROM tabela WHERE id_akcja=1 LIMIT 2 )
  2. UNION ALL
  3. (SELECT * FROM tabela ORDER BY id DESC LIMIT 5 )
maciu
klauzula ALL służy do zwrócenia zduplikowanych rekordów, a ja chciałem, żeby rekordy z selecta pierwszego były na szczycie wyników.
Już sobie z tym poradziłem, wstawiam kod, może się komuś przyda

  1. (SELECT *, 1 AS order_by FROM tabela WHERE id_akcja=1 LIMIT 2 )
  2. UNION
  3. (SELECT *, 0 AS order_by FROM tabela ORDER BY id DESC LIMIT 5 ) ORDER BY order_by DESC
Cezar708
fakt, właśnie doczytałem i chciałem Cię poinformować... trochę się pospieszyłem z odpowiedzią

BTW. Sprytny sposób, gratuluję pomysłowości winksmiley.jpg
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.