Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> pobieranie informacji z kilku tabel niepołączonych ze sobą, aby znaleść najświeższa informację
japolak
post 19.09.2011, 22:11:51
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


witam

mam taki oto problem

mam sobie 4 tabele:

  1. CREATE TABLE IF NOT EXISTS `comments` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `id_ob` int(10) UNSIGNED NOT NULL,
  4. `type` tinyint(3) NOT NULL,
  5. .......
  6. `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  7. `ip` int(11) UNSIGNED NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ;
  10.  
  11.  
  12.  
  13. CREATE TABLE IF NOT EXISTS `object` (
  14. `id_ob` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  15. `id_cat` int(10) UNSIGNED DEFAULT NULL,
  16. `type` tinyint(3) UNSIGNED NOT NULL,
  17. .........
  18. `content` text COLLATE utf8_polish_ci,
  19. `creation_date` int(11) DEFAULT NULL,
  20.  
  21. PRIMARY KEY (`id_ob`),
  22. FULLTEXT KEY `title` (`title`,`heading`,`content`),
  23. FULLTEXT KEY `title_2` (`title`,`heading`,`content`),
  24. FULLTEXT KEY `title_3` (`title`,`heading`,`content`)
  25. ) ;
  26.  
  27.  
  28.  
  29.  
  30. CREATE TABLE IF NOT EXISTS `user_movie` (
  31. `movie_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  32. `id_user` int(10) UNSIGNED NOT NULL,
  33. `id_cat` int(10) UNSIGNED NOT NULL,
  34. ........
  35. `add_date` datetime NOT NULL,
  36.  
  37. PRIMARY KEY (`movie_id`)
  38. );
  39.  
  40.  
  41.  
  42. CREATE TABLE IF NOT EXISTS `user_photo` (
  43. `photo_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  44. `id_user` int(10) UNSIGNED NOT NULL,
  45. `album_id` int(10) UNSIGNED NOT NULL,
  46. ......
  47. `add_date_photo` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  48. `counter` int(10) UNSIGNED NOT NULL,
  49. PRIMARY KEY (`photo_id`)
  50. );



jak widać w każdej z nich jest jakaś kolumna odpowiadająca za datę wstawienia..
ale w żaden sposób dane nie są ze sobą powiązane..
każda tabela zawiera calkiem inne dane . i nawet kolumny z datami sie różnią nazwami...

i chciałbym teraz aby np. wyszukało mi 100 najnowszych dodanych informacji z tych 4 tabel..

jak to zrobic?


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
melkorm
post 19.09.2011, 22:44:21
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


UNION


--------------------
Go to the top of the page
+Quote Post
japolak
post 20.09.2011, 22:24:12
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


Cytat(melkorm @ 19.09.2011, 23:44:21 ) *


union niestety nie spelnia moich oczekiwań..
ma dosc spore ograniczenia
jak go zastosuje nie mam mozliwości odczytu który wynik z ktorej tabeli pochodzi.. bo tam wszystko sie miksuje.. oraz trzeba stosowac te same typy kolumn co jest wielkim ograniczeniem


zamysł jest taki
- ze sortuje sobie rekordy po dacie powstania ze wszystkich 4 tabel .. ale w wyniku wiem ze np. 1 rekord pochodzi z 3 tabeli a 2 rekord z 1 tabeli itd...


ktos ma inne pomysly?


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post
melkorm
post 20.09.2011, 23:13:50
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Zawsze możesz rzutować, do tego zawsze możesz dać pole definiujące z której tabelki pochodzi dany rekord.

Da się to zrobić za pomocą UNION wystarczy trochę pokombinować.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 20.09.2011, 23:42:46
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli wybierane dane będą miały mniej-więcej taki sam schemat to można to zrobić przy pomocy UNION:
  1. SELECT * FROM (
  2. SELECT id, ..., dt AS created_at, "comments" AS source FROM ...
  3. UNION SELECT id, ..., creation_date AS created_at, "object" AS source FROM ...
  4. UNION SELECT id, ..., UNIX_TIMESTAMP(add_date) AS created_at, "user_movie" AS source FROM ...
  5. ) ORDER BY created_at DESC LIMIT 100;
Jednak jeżeli z każdej tabeli wybierasz inne dane zrób cztery zapytania i dopiero na poziomie aplikacji posortuj je wg daty po czym pozbądź się niepotrzebnych danych.
Go to the top of the page
+Quote Post
japolak
post 21.09.2011, 19:16:45
Post #6





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


Cytat(melkorm @ 19.09.2011, 23:44:21 ) *



Cytat(Crozin @ 21.09.2011, 00:42:46 ) *
Jeżeli wybierane dane będą miały mniej-więcej taki sam schemat to można to zrobić przy pomocy UNION:
  1. SELECT * FROM (
  2. SELECT id, ..., dt AS created_at, "comments" AS source FROM ...
  3. UNION SELECT id, ..., creation_date AS created_at, "object" AS source FROM ...
  4. UNION SELECT id, ..., UNIX_TIMESTAMP(add_date) AS created_at, "user_movie" AS source FROM ...
  5. ) ORDER BY created_at DESC LIMIT 100;
Jednak jeżeli z każdej tabeli wybierasz inne dane zrób cztery zapytania i dopiero na poziomie aplikacji posortuj je wg daty po czym pozbądź się niepotrzebnych danych.


dzieki @Crozin własnie o cos takiego mi chodziło.. samemu ciezko było by mi dojść do takiego pomysłu;) .. po lekkich modyfikacjach wszystko ladnie sie wyszukuje
za to +

no i dzieki @melkorm bo jednak dobrze mnie kierowałes i za to +

rozwiazanie mojegor proglemu:
  1. (
  2. SELECT id AS id1, dt AS created_at, "comments" AS source
  3. FROM comments
  4. )
  5. UNION (
  6.  
  7. SELECT id_ob, FROM_UNIXTIME( creation_date ) AS created_at, "object" AS source
  8. FROM object
  9. )
  10. UNION (
  11.  
  12. SELECT movie_id, add_date AS created_at, "user_movie" AS source
  13. FROM user_movie
  14. )
  15. UNION (
  16.  
  17. SELECT photo_id, add_date_photo AS created_at, "user_photo" AS source
  18. FROM user_photo
  19. )
  20. ORDER BY `created_at` DESC


pozdrawiam


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:44