Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Rekordy z kilku tabel
Forum PHP.pl > Forum > PHP
gasell
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ę.
Spawnm
może
$sql= "SELECT wycieczki.id, konkursy.id, spotkania.id FROM wycieczki , konkursy , spotkania ORDER BY id DESC LIMIT 3";
piotrooo89
~Spawnm Twoje pobierze tylko ID, a on napisał że chce wszystko.

  1. SELECT * FROM wycieczki, konkursy, spotkania ORDER BY wycieczki.id DESC LIMIT 3
gasell
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.
SongoQ
Uzyj UNION - przyklady jak zawsze znajdziesz w google.
gasell
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...
piotrooo89
  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
kefirek
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
gasell
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ę :|
kefirek
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. ?>
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.