Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie po 1 polu z 3 tabel
Ravgor
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.02.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
ShadowD
post
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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ć)

Ten post edytował ShadowD 30.01.2012, 01:36:42
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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]


Ten post edytował mortus 30.01.2012, 08:03:35
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 06:34