Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] Rekordy z kilku tabel
gasell
post 7.03.2009, 10:40:27
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.03.2009

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


Witam,

Mam pewien problem który chciałbym rozwiązać. Sprawa wygląda tak.

Mam 3 tabele - wycieczki, konkursy, spotkania. Struktura:

wycieczki
id
data
tytul
tresc

konkursy
id
data
tytul
tresc

spotkania
id
data
tytul
tresc

Chcę wyciągnąć z tych tabel po jednym rekordzie - sortowanie DATA (DESC) limit 3

Problem w tym, że jak zastosuję SELECT ALL i dodam trzy rekordy do tabeli "spotkania" to wybiera mi 3 rekordy z tej tabeli a z tabel "wycieczki" i "spotkania" nic nie mam. A przecież potrzebuję powyciągać najnowsze rekordy z trzech tabel i posortować je.

Pomoże mi ktoś? Proszę.
Go to the top of the page
+Quote Post
Spawnm
post 7.03.2009, 10:47:01
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




może
$sql= "SELECT wycieczki.id, konkursy.id, spotkania.id FROM wycieczki , konkursy , spotkania ORDER BY id DESC LIMIT 3";
Go to the top of the page
+Quote Post
piotrooo89
post 7.03.2009, 10:52:14
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




~Spawnm Twoje pobierze tylko ID, a on napisał że chce wszystko.

  1. SELECT * FROM wycieczki, konkursy, spotkania ORDER BY wycieczki.id DESC LIMIT 3


--------------------
Go to the top of the page
+Quote Post
gasell
post 7.03.2009, 10:55:35
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.03.2009

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


Spawnm smile.gif No właśnie nie bardzo bo rekordów id mam w tabelach różną ilość. Muszę je wyciągnąć po data.
Go to the top of the page
+Quote Post
SongoQ
post 7.03.2009, 10:55:49
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Uzyj UNION - przyklady jak zawsze znajdziesz w google.


--------------------
Go to the top of the page
+Quote Post
gasell
post 7.03.2009, 11:03:57
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.03.2009

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


Złączenie tabel przez UNION tak, ale jak dodam 3 rekordy do tabeli "wycieczki" a nie dodam żadnych do tabel "konkursy" i "spotkania" to wyciągnę jedynie trzy rekordy z "wycieczki" - po kolumnie data. A ja chcę wyciągnąć po jednym rekordzie z tych tabel i dopiero przesortować je...
Go to the top of the page
+Quote Post
piotrooo89
post 7.03.2009, 11:11:12
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




  1. SELECT * FROM `wycieczki` LIMIT 1
  2. UNION
  3. SELECT * FROM `konkursy` LIMIT 1
  4. UNION
  5. SELECT * FROM `spotkania` LIMIT 1 ORDER BY DATA DESC


Ten post edytował piotrooo89 7.03.2009, 11:11:36


--------------------
Go to the top of the page
+Quote Post
kefirek
post 7.03.2009, 11:20:03
Post #8





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Albo tak powinno dzialc na 100%

  1. SELECT * FROM (
  2. (SELECT * FROM `wycieczki` LIMIT 1)
  3. UNION ALL
  4. (SELECT * FROM `konkursy` LIMIT 1)
  5. UNION ALL
  6. (SELECT * FROM `spotkania` LIMIT 1)
  7. ) AS razem ORDER BY DATA DESC


Ten post edytował kefirek 7.03.2009, 11:20:16
Go to the top of the page
+Quote Post
gasell
post 7.03.2009, 21:09:50
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.03.2009

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


Kefirek smile.gif To jest właśnie to! Troszę przerobiłem ale hula mi teraz tak jak potrzebowałem smile.gif Wklejam dla potomności...

  1. $sql = mysql_query("SELECT * FROM
  2. (
  3. (SELECT * FROM wycieczki ORDER BY date DESC LIMIT 1 )
  4. UNION ALL
  5. (SELECT * FROM spotkania ORDER BY date DESC LIMIT 1 )
  6. UNION ALL
  7. (SELECT * FROM konkursy ORDER BY date DESC LIMIT 1 )
  8. )
  9. AS razem ORDER BY date DESC LIMIT 3 ");


Dzięki wielkie i... pomógł smile.gif

A jak załatwić żeby w zależności od nazwy tabeli z której pobrany jest rekord zmieniac TOCOS.php?

  1. <?php
  2. if(mysql_num_rows($wynik) > 0) {
  3. while($r = mysql_fetch_array($wynik)) {
  4. echo "<div>$r[data] | $r[tytul] <a href=\"TOCOS.php?id=r[id]\">dalej...</a></div>";
  5. }
  6. }
  7. ?>


Tak żeby mieć mniej więcej coś takiego

10-12-2008 | Szopka z origami <a href="konkursy.php?id=35>dalej...</a>
08-10-2008 | Na babią górę <a href="wycieczki.php?id=88>dalej...</a>
07-10-2008 | Przed wycieczką... <a href="spotkania.php?id=79>dalej...</a>

Nie wiem czy ja to dobrze tłumaczę :|
Go to the top of the page
+Quote Post
kefirek
post 7.03.2009, 21:46:49
Post #10





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Do zapytania dodaj NAME_CONST('TYP', W); czyli całe zapytanie wyglodało by tak

EDIT: poprawiłem zapytanie powinno dzialac na 100%

  1. $sql = mysql_query("SELECT * FROM
  2. (
  3. (SELECT *, NAME_CONST('TYP', 'W') FROM wycieczki ORDER BY date DESC LIMIT 1 )
  4. UNION ALL
  5. (SELECT *, NAME_CONST('TYP', 'S') FROM spotkania ORDER BY date DESC LIMIT 1 )
  6. UNION ALL
  7. (SELECT *, NAME_CONST('TYP', 'K') FROM konkursy ORDER BY date DESC LIMIT 1 )
  8. )
  9. AS razem ORDER BY date DESC LIMIT 3 ");


Potem robisz tak

  1. <?php
  2. if(mysql_num_rows($wynik) > 0) {
  3. while($r = mysql_fetch_array($wynik)) {
  4.  
  5.  
  6. switch ($r['typ']) {
  7.            
  8. case 'W': $typ='wycieczki.php?id';
  9.  
  10.  
  11. break;
  12.            
  13. case 'S':$typ='spotkania.php?id';
  14.  
  15. break;
  16.            
  17. case 'K': $typ='konkursy.php?id';
  18.  
  19.  
  20. break;
  21.            
  22.        
  23. default:
  24. }
  25.  
  26.  
  27. echo "<div>".$r['data']." | ".$r['tytul']." <a href=".$typ."=".$r['id'].">dalej...</a></div>";
  28.  
  29.  
  30. }
  31. }
  32. ?>


Ten post edytował kefirek 8.03.2009, 09:18:29
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: 28.04.2024 - 05:03