SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10.02.2005, 20:59:17
Thom- Thom- ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 6
Sortieren über 2 Tabellen

Guten Tag,

nach längerer Suche im inzwischen kompletten Internet wäre ich den Usern dieses Forums sehr zum Dank verpflichtet wenn diese mir bei folgendem Problem helfen könnten:

Für einen Teil meiner Projektarbeit gehört das Coden eines Forums dazu.
Auf der Seite mit der Auflistung der momentanen Themen sollen diese nach dem "last poster" sortiert werden.

Ich habe meine Tabellen wie folgt aufgebaut:

Tabelle topic:
Code:
id      forum_id      closed      pinned
1       1               0             1
2       1               1             1
3       1               0             0

[...]
Tabelle post:
Code:
id      topic_id      user_id      created                         title              text
1       1              1              2005-02-07 00:00:00       muh              blablubb
2       2              1              2005-02-07 00:00:00       knubbelkekse     JA WILLISCH !!!!!

Wie man bereits sieht, ist eine Ausgabe aller Topics, sortiert nach dem Datum des letzten Post leider nicht so einfach möglich.

Mein momentaner Code ohne die Sortierung lautet so:

PHP-Code:
    $getunpinned $DB->query("SELECT * FROM topic WHERE pinned=0 AND forum_id=$show");

    while( 
$row mysql_fetch_object($getunpinned) )
    {        
        echo 
'DEBUG:Topicid: '.$row->id.' | <br />';
        
$posts $DB->anzahl("SELECT * FROM post WHERE topic_id=$row->id");
        
        
$getfirstpost $DB->query("SELECT p.title,u.username FROM post p,user u WHERE p.topic_id=$row->id AND p.user_id=u.id ORDER BY p.created");
        
$firstpost mysql_fetch_object($getfirstpost);
        
        
$getlastpost $DB->query("SELECT p.created,p.title,u.username FROM post p,user u WHERE p.topic_id=$row->id AND p.user_id=u.id ORDER BY created DESC");
        
$lastpost mysql_fetch_object($getlastpost);

[...]

}

[...] 
Idealerweise würde die Abfrage so lauten:
"SELECT * FROM topic ORDER BY [Letzter Post].created"

Nach einigem Rumsuchen habe ich folgende Methode probiert:
"SELECT post.* FROM post INNER JOIN topic ON post.topic_id=topic.id WHERE topic.pinned=0 AND topic.forum_id=$show ORDER BY post.created DESC"
(Wobei ich sämtliche $row->id's zu $row->topic_id umändern musste)
Diese Methode funktionierte auch, das Problem darin ist aber,dass er nunmal alle Posts nutzt, d.h. ich keinerlei Probleme habe solang ein Topic nur 1 Post hat, aber sobalt jemand darauf antwortet erscheint dies mehrmals.

Beispiel:
Code:
Thread1       posts:1       autor:keks         lastpost:2005-02-10 16:23:04
Thread2       posts:1       autor:knubbel     lastpost:2005-02-09 16:23:34
Thread3       posts:2       autor:baer         lastpost:2005-02-09 01:27:00
Thread4       posts:2       autor:mookoo     lastpost:2005-02-08 00:00:00
Thread4       posts:2       autor:mookoo     lastpost:2005-02-08 00:00:00
Thread3       posts:2       autor:baer         lastpost:2005-02-09 01:27:00
Wie man sieht erscheinen die 2 Letzten Posts doppelt, in umgekehrter Reihenfolge und irgendwie sinnlos.
Ich bin langsam mit meinem Rat am ende, habe schon ein GROUP BY probiert ("SELECT post.* FROM post INNER JOIN topic ON post.topic_id=topic.id WHERE topic.pinned=0 AND topic.forum_id=$show GROUP BY post.topic_id ORDER BY post.created DESC"), doch auch das macht fehler, es werden dann nämlich nur die ersten 2 und die letzten 2 Einträge angezeigt, d.h. die Sortierung ist falsch (bei den letzten 2 kommt zuerst der mit 2005-02-08 und dann der mit 2005-02-09)

Ich weiß es ist evtl etwas viel verlangt und schlecht beschrieben, ich würde mich dennoch unheimlich über Hilfe freuen, ich bin momentan nämlich mit meinem Latein am ende.

Mit freundlichen Grüßen
Thomas
Mit Zitat antworten
  #2  
Alt 10.02.2005, 21:58:24
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Sortieren über 2 Tabellen

wie wäre es, wenn du mit DISTINCT nur unterschiedliche ids raussuchst...
Mit Zitat antworten
  #3  
Alt 11.02.2005, 10:21:13
Marilu Marilu ist offline
Member
 
Registriert seit: Apr 2003
Ort: 49.54, 8.35 - 3./9
Beiträge: 878
AW: Sortieren über 2 Tabellen

Du mußt die Abfrage mit GROUP BY erweitern, um die doppelten Einträge zu eliminieren. Poste doch mal einen Dump zum rumspielen.
Mit Zitat antworten
  #4  
Alt 11.02.2005, 11:35:06
Thom- Thom- ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 6
AW: Sortieren über 2 Tabellen

Guten Morgen,

ich danke erstmal für die Beiträge :]

Inzwischen steige ich leider irgendwie da nicht mehr durch.
Habe meine Tabelle geleert und Systematisch Topics und Posts eingefügt.
Das Problem mit den Doppelten Einträgen existiert zwar nicht mehr, aber ich habe herausgefunden das er nicht nach dem ältesten Post sortiert, sondern nach dem ersten Post.

Ich weiß ehrlichgesagt nicht wo das Problem ist, habs auch mit nem zusätzlichen distinct dazu Probiert, aber evtl. sehe ich ja den Wald vor lauter Bäumen nicht.

Hier erstmal ein link zum dump:
Dump

Und ein link zu einemnem Screenshot, welches das Problem evtl besser erläutert:
Screenshot

Ich danke schonmal für die investierte Zeit

mit freundlichen Grüßen
Thomas
Mit Zitat antworten
  #5  
Alt 11.02.2005, 15:00:46
Marilu Marilu ist offline
Member
 
Registriert seit: Apr 2003
Ort: 49.54, 8.35 - 3./9
Beiträge: 878
AW: Sortieren über 2 Tabellen

Ich kann die Tabellen nicht erzeugen, es hängt am COLLATE.
Mit Zitat antworten
  #6  
Alt 11.02.2005, 15:11:34
Thom- Thom- ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 6
AW: Sortieren über 2 Tabellen

Zitat:
Zitat von Marilu
Ich kann die Tabellen nicht erzeugen, es hängt am COLLATE.
Hrm, keine Ahnung, hab den Dump direkt vom phpMyAdmin so bekommen.
Man kann aber glaub den hinteren Teil (also den Teil hinter der abschließenden Klammer eines Creates) weglassen.

Aus
Code:
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;
mach
Code:
);
korrigiert mich falls ich mich irre.
Frage mich ohnehin für was dies gut ist :]

mit freundlichen Grüßen
Thomas

Geändert von Thom- (12.02.2005 um 00:46:52 Uhr)
Mit Zitat antworten
  #7  
Alt 14.02.2005, 12:03:49
Marilu Marilu ist offline
Member
 
Registriert seit: Apr 2003
Ort: 49.54, 8.35 - 3./9
Beiträge: 878
AW: Sortieren über 2 Tabellen

Welche Spalten (aus welcher Tabelle) willst Du letztendlich mit Deiner Abfrage anzeigen?
Mit Zitat antworten
  #8  
Alt 14.02.2005, 15:02:29
Thom- Thom- ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 6
AW: Sortieren über 2 Tabellen

Im Endeffekt möchte ich alle Topics auflisten lassen, welche aber nach dem created-Datum ihrer letzten Posts sortiert sein sollen.
Mit Zitat antworten
  #9  
Alt 14.02.2005, 15:20:19
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Sortieren über 2 Tabellen

PHP-Code:
<?php
    $sql 
"SELECT
                p.id,
                p.topic_id,
                p.user_id,
                p.created AS datum,
                p.title,
                p.text,
                t.id,
                t.forum_id,
                t.closed,
                t.pinned
            FROM
                post p
            LEFT JOIN
                topic t
            ON
                t.id = p.topic_id
            GROUP BY
                p.topic_id
            ORDER BY
                YEAR(p.created),
                MONTH(p.created),
                DAYOFMONTH(p.created)"
;
?>

Geändert von xabbuh (14.02.2005 um 15:23:05 Uhr)
Mit Zitat antworten
  #10  
Alt 14.02.2005, 17:40:59
Thom- Thom- ist offline
Anfänger
 
Registriert seit: Feb 2005
Beiträge: 6
AW: Sortieren über 2 Tabellen

Guten Tag,

erstmal möchte ich mich bei dir bedanken xabbuh für die Mühe.
Es klappt auch soweit wie man die Threads in normaler Reihenfolge anzeigen möchte.
Möchte man diese hingegen von hinten anzeigen (also mit nem DESC dran) gehts schief.

Ich weiß langsam nicht so recht ob sich die mühe noch lohnt, oder ob man nicht einfach an jedes Topic ein LastPostDate anfügen sollte, dies würde wohl auch bei großer Datenmenge wesentlich schneller sein als ein rekursives suchen nach dem lastpost.

Ich danke hiermit nochmals für die Hilfe.
Schade das es nicht geklappt hatte wie ich dachte :]

einen schönen Abend noch,
Thomas
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mit COUNT aus 2 oder mehr Tabellen zählen schlodd MySQLi/PDO/(MySQL) 2 14.01.2005 13:45:10
Tabellen sortieren wie bei phpMyAdmin mit austauschbaren gifs trigan22 PHP für Fortgeschrittene und Experten 1 12.02.2004 14:58:45
readdir sortieren und dyn. tabellen cobracio PHP für Fortgeschrittene und Experten 3 08.10.2003 03:41:09
Db abfragen von 2 tabellen GrafvonHenneber PHP Grundlagen 6 22.01.2003 15:37:48
Mehrere Tabellen in DB sortieren DiJae PHP Grundlagen 4 23.09.2002 10:58:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:35:52 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt