Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie po 1 polu z 3 tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Ravgor
Witam. Mam 3 tabele: pictures, movies i texts. W każdej z nich jest pole "time" z unixowym czasem. Chcę wyciągnąć rekordy posortowane według pola time (ale nie z jednej konkretnej tabeli, tylko z wszystkich). Proszę o pomoc.
mortus
  1. (SELECT * FROM `pictures`)
  2. UNION
  3. (SELECT * FROM `movies`)
  4. UNION
  5. (SELECT * FROM `texts`)
  6. ORDER BY `time` [DESC | ASC]

Przy czym trzeba tak skonstruować zapytania SELECT, aby każde z nich wyciągało jednakową liczbę kolumn.
ShadowD
Ja tam od sql nie jestem za dobry, ale wydaje mi się że coś takiego:
Kod
SELECT * FROM tabela1, tabela2, tabela3 ORDER BY `time` [DESC | ASC]

też zadziała tak jak powinno i nie ma żadnych obostrzeń typu kolegi wyżej. (mogę się mylić)
mortus
Cytat(ShadowD @ 30.01.2012, 01:36:18 ) *
Ja tam od sql nie jestem za dobry, ale wydaje mi się że coś takiego:
Kod
SELECT * FROM tabela1, tabela2, tabela3 ORDER BY `time` [DESC | ASC]

też zadziała tak jak powinno i nie ma żadnych obostrzeń typu kolegi wyżej. (mogę się mylić)

I się mylisz. Twoje zapytanie zwróci wszystkie dane (w tym trzy razy kolumnę time), ale zapisane w jednym wierszu. Problemem będzie później oddzielenie tych danych, nie wpominając już o sortowaniu, którego wtedy raczej nie zrealizujesz.

EDIT1: De facto w zapytaniu nie definujesz "sposobu" złączenia tabel (bo takiego sposobu nie ma), a w konsekwencji uzyskasz sporą nadmiarowość danych logicznie ze sobą nie powiązanych. W ogóle to jest źle.

EDIT2: Do zaproponowanego przeze mnie rozwiązania warto dodać pseudokolumnę type, w której będziemy mogli określić, z której tabeli pochodzi wiersz. Zatem przy założeniu, że każda tabela ma tyle samo kolumn zapytanie będzie wyglądać tak:
  1. (SELECT *, 'picture' AS `type` FROM `pictures`)
  2. UNION
  3. (SELECT *, 'movie' AS `type` FROM `movies`)
  4. UNION
  5. (SELECT *, 'text' AS `type` FROM `texts`)
  6. ORDER BY `time` [DESC | ASC]
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-2024 Invision Power Services, Inc.