tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
263
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    himmelvergebenusw himmelvergebenusw ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    Guten Abend,
    Ich bins wieder einmal mehr,
    Ich versuche momentan eine Liste mit den letzten Beiträgen auf der Seite zu machen,
    dazu habe ich testweise 2 Tabellen genommen, News und gaestebuch.
    (Um noch anzufügen mit einer Tabelle, geht es irgendwie ohne Probleme)
    Nun möchte ich aber aus der ersten Tabelle und der 2. Tabelle die letzten Beiträge auslesen, danach sollen sie nach Datum sortiert werden.
    Dies bereitet mir allerdings Sorgen

    Dabei habe ich dass hier versucht :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
        $sql = "SELECT
                    Datum,
                    Titel,
                    Inhalt
     
                FROM News     
                INNER JOIN gaestebuch  
                WHERE DATE_ADD(Datum, INTERVAL 3 DAY) >= NOW()
                ORDER BY
                    Datum DESC
                LIMIT 2";

    Datum ist in beiden Tabellen vorhanden
    Titel ist in der News Tabelle vorhanden und Inhalt in der gaestebuch Tabelle.
    Mit der where Abfrage möchte ich den Zeitintervall begrenzen und mit Datum Desc halt nach Datum sortieren.
    Das funktioniert bei einer Tabelle auch prima, bei 2 Tabellen überhaupt nicht.
    Mir fehlt überhaupt die Idee wie ich das umsetzen könnte, damit dies geht.
    Später im Script gebe ich das ganze wie folgt aus: (bei einer Tabelle)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
        $result = mysql_query($sql) OR die(mysql_error());
        if(mysql_num_rows($result)) {
            while($row = mysql_fetch_assoc($result)) {
                $a = $row['Datum'];
                $try = strtotime("$a");
                $ez = time();
                $auso = $ez - $try;
                $nun = $auso / 86400;
                echo "    <div class=\"akl\">\n";
                echo "<a href=\"index.php?section=news\">";
                echo "» ";
                echo "</a>";
                echo $row['Titel'];
                echo "    </div>\n";
                echo "    <div class=\"akr\">\n";
                echo "    ‹ ";
                echo ceil($nun);
                echo " Tagen";
                echo "    </div>\n";
                echo "    <div class=\"clearen\">\n";
                echo "    </div>\n";
             
            }
        } else {
                echo "    <div class=\"Aktuell\">\n";
                echo "» Keine News vorhanden\n";
                echo "    </div>\n";
        }

    Um hier noch anzufügen, die Daten sind in beiden Tabellen zB so"2008-03-22 14:30:59" gespeichert. Also kein Timestamp. Ich kam erst später auf die Idee, dass Timestamps wahrscheindlich sinnvoller gewesen wären.
    Vielleicht hat jemand von euch schonmal sowas gemacht und hätte eine Umsetzungsidee.
    Von der Mysql abfrage bis zum Ausgeben der beiden verschiedenen Datensätze.
    Grüsse und danke falls sich jemand die Mühe macht.
     

  2. #2
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Ich hab jetzt mal nur die ersten Zeilen deines Post gelesen (für mehr bin ich jetzt zu müde ).

    Du machst einen Inner Join - was vollkommen falsch ist.
    Die Tabellen haben ja null gemeinsam.

    Was du brauchst ist eine UNION-Abfrage, bei der du darauf achten musst, dass beide Teil-Abfragen die selben Spalten (Anzahl und Art) zurückgeben.
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  3. #3
    himmelvergebenusw himmelvergebenusw ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    ah ups, danke
    Ich kenn mich in dem Bereich leider nicht so aus, noch eine andere Frage hätte ich,
    ich möchte ja Inhalt eigentlich gleich behandeln wie den Titel, wie kann ich sowas realisieren? Darf ich dem den Alias Titel geben?
     

  4. #4
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Deine beiden Teilselects müssen nicht die gleichen Spaltennamen haben, sondern nur gleiche Spaltenanzahl und Spaltenart.

    Inhalt und Titel solltest du also problemlos kombinieren können

    Code sql:
    1
    2
    3
    
    SELECT spalte1, spalte2, titel FROM tabelle1
    UNION
    SELECT spalte4, spalte5, inhalt FROM tabelle2
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  5. #5
    himmelvergebenusw himmelvergebenusw ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    ah das funktioniert ja wunderbar, ich hab mir das vieeel komplizierter vorgestellt.
    Tausend-Dank
     

  6. #6
    himmelvergebenusw himmelvergebenusw ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    Ich hätte jetzt doch nochmal eine Frage, ist es nach/mit Union möglich später mit einer If Abfrage herauszufinden von welcher Tabelle nun der Datensatz stammt?
    Soweit ich mitbekommen habe, ist es ja nun so, dass er die praktisch verschmilzt.
    Ich möchte nämlich noch die Kategorie angeben in welcher der Post war, bzw eine Link dafür hinzufügen.
    Grüsse
     

  7. #7
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    auch das kannst Du mit in das Statement packen:

    Code sql:
    1
    2
    3
    
          SELECT spalte1, spalte2, titel, 'tabelle1' AS kategorie FROM tabelle1
          UNION
          SELECT spalte4, spalte5, inhalt, 'tabelle2' AS kategorie FROM tabelle2

    LG
     

  8. #8
    himmelvergebenusw himmelvergebenusw ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    vielen dank, auch das hat super funktioniert und ich habs nun endlich geschafft

    PHP-Code:
    <?php
        
    @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
        
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

        
    $sql "
          SELECT Datum, Titel, 'news' AS kategorie FROM News
               WHERE DATE_ADD(Datum, INTERVAL 3 DAY) >= NOW()
          union

          SELECT Datum, Inhalt, 'gb' AS kategorie FROM gaestebuch 
               WHERE DATE_ADD(Datum, INTERVAL 3 DAY) >= NOW()
                ORDER BY
                    Datum DESC
                LIMIT 2"
    ;
        
    $result mysql_query($sql) OR die(mysql_error());
        if(
    mysql_num_rows($result)) {
            while(
    $row mysql_fetch_assoc($result)) {
                if(
    strlen($row['Titel']) >= 20) {
                
    $row['Titel'] = wordwrap($row['Titel'],20); 
                
    $row['Titel'] = substr($row['Titel'],0,strpos($row['Titel'],"\n")).'…'
                }
                
    $a $row['Datum'];
                
    $try strtotime("$a");
                
    $ez time();
                
    $auso $ez $try;
                
    $nun $auso 86400;
                echo 
    "    <div class=\"akl\">\n";
                if(
    $row['kategorie'] == "news")
                {
                echo 
    "<a href=\"index.php?section=news\">";
                echo 
    "» ";
                echo 
    "news.";
                }
                elseif(
    $row['kategorie'] == "gb")
                {
                echo 
    "<a href=\"index.php?section=gb\">";
                echo 
    "» ";
                echo 
    "book.";
                }
                else
                {
                echo 
    "unbk.";
                }
                echo 
    "</a>";
                echo 
    $row['Titel'];

                echo 
    "    </div>\n";
                echo 
    "    <div class=\"akr\">\n";
                echo 
    "    ‹ ";
                echo 
    ceil($nun);
                echo 
    " Tagen";
                echo 
    "    </div>\n";
                echo 
    "    <div class=\"clearen\">\n";
                echo 
    "    </div>\n";
             
            }
        } else {
                echo 
    "    <div class=\"Aktuell\">\n";
                echo 
    "» Keine News vorhanden\n";
                echo 
    "    </div>\n";
        }
    ?>
     

Ähnliche Themen

  1. Problem bei einem JOIN zw. zwei Tabellen, (Daten aus beiden Tabellen auslesen)
    Von CookieBuster im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 05.04.10, 22:20
  2. Antworten: 10
    Letzter Beitrag: 06.05.05, 23:59
  3. Daten aus 2 Tabellen auslesen
    Von nobaschwa im Forum PHP
    Antworten: 5
    Letzter Beitrag: 03.12.04, 12:02
  4. Daten aus 2 Access-Tabellen auslesen
    Von andrine im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 30.11.04, 13:47
  5. Daten aus 2 MySQL-Tabellen auslesen
    Von supercat1510 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 24.05.03, 20:53