php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.11.2011, 03:49  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard mysql abfrage um jeweils aktuellsten beitrag zu finden

Moin,

Ich programmiere im Moment eine Art Blog-System.
Mein Tabellenlayout für die Beiträge sieht wie folgt aus:

PHP-Code:
+----+-------+---------+---------+---------------------+---------------------+----------+
id user  subject content startPostTime       sendPostTime        changeOf |
+----+-------+---------+---------+---------------------+---------------------+----------+ 
Wenn jetzt ein neuer Beitrag eingefügt wird, werden alle Felder bis auf das letzte befüllt.
Dieses wird nur gefüllt wenn ein Beitrag editiert wurde, hier wird dann die id des Originalbeitrags eingetragen.

So etwas könnte dann mal beispielsweise so aussehen:
PHP-Code:
+----+-------+---------+-------------------+---------------------+---------------------+----------+
id user  subject content           startPostTime       sendPostTime        changeOf |
+----+-------+---------+-------------------+---------------------+---------------------+----------+
|  
10156 Cats    Cats are Cool     2011-11-08 03:32:36 2011-11-08 03:45:34 |        |
|  
10156 Cats    Cats are NOT Cool 2011-11-08 03:32:36 2011-11-08 03:45:49 |        |
|  
10156 Cats    Nevermind         2011-11-08 03:32:36 2011-11-08 03:46:00 |        |
+----+-------+---------+-------------------+---------------------+---------------------+----------+ 
Ich scheitere leider dadran immer nur die aktuellste Version des Beitrages abzurufen, irgendwie muss ich ja die 3 Beiträge groupen und dann sendPostTime vergleichen.
Zulakis ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.11.2011, 04:13  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Und wo liegt das Problem?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.11.2011, 04:15  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Und wo liegt das Problem?
Beim groupen der zusammengehörigen Einträge, ich habe leider überhaupt keinen Ansatz wie ich das hinkriege.

Edit: Meine Abfrage sieht in etwa so aus

PHP-Code:
SELECT *
    
FROM `posts`
WHERE 
    
`sendPostTime` = (
        
SELECT MAX( `sendPostTime` )
        
FROM `posts`
        .....
WHERE GROUP
    


Geändert von Zulakis (08.11.2011 um 04:32 Uhr).
Zulakis ist offline   Mit Zitat antworten
Alt 08.11.2011, 09:58  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Wenn du die Möglichkeit hast die Tabellenstruktur anzupassen, dann mach dir doch das Leben leichter Entweder du führst einen gemeinsamen Identifier für die Gruppe ein (z.B. die ID des Originalbeitrags), oder ein Kennzeichen welche Beiträge gerade die letzten in der Kette sind. Oder einfach beides.

Dann werden deine Queries ziemlich simpel und du kannst dir völlig problemlos sowohl alle aktuellen Beiträge, als auch alle alten Versionen zu einem der Beiträge ausgeben lassen.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 08.11.2011, 13:42  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mquadrat Beitrag anzeigen
Wenn du die Möglichkeit hast die Tabellenstruktur anzupassen, dann mach dir doch das Leben leichter Entweder du führst einen gemeinsamen Identifier für die Gruppe ein (z.B. die ID des Originalbeitrags), oder ein Kennzeichen welche Beiträge gerade die letzten in der Kette sind. Oder einfach beides.

Dann werden deine Queries ziemlich simpel und du kannst dir völlig problemlos sowohl alle aktuellen Beiträge, als auch alle alten Versionen zu einem der Beiträge ausgeben lassen.
Ich hab hier mal was ausprobiert. Datenbankinhalt:

PHP-Code:
+----+-------+------------------------+-----------------------------------------+---------------------+---------------------+----------+
id user  subject                content                                 startPostTime       sendPostTime        changeOf |
+----+-------+------------------------+-----------------------------------------+---------------------+---------------------+----------+
|  
10156 Cats                   Cats are NOT Cool                       2011-11-08 03:32:36 2011-11-08 03:45:49 |        |
|  
10156 Cats                   Cats are Cool                           2011-11-08 03:32:36 2011-11-08 03:45:34 |        |
|  
10156 Cats                   Nevermind                               2011-11-08 03:32:36 2011-11-08 03:46:00 |        |
|  
10156 Neuer Post             Dies ist ein Post!                      | 2011-11-08 05:59:23 2011-11-08 05:59:39 |        |
|  
10156 Mittiger Text ist ftw! | <center>Mittiger text ist cool</center> | 2011-11-08 05:59:39 2011-11-08 05:59:55 |        |
+----+-------+------------------------+-----------------------------------------+---------------------+---------------------+----------+ 
Query:
PHP-Code:
SELECT 
            
`t1`.`id` , `t1`.`user` , `t1`.`subject` , `t1`.`content` , `t1`.`sendPostTime` , `users`.`firstname` , `users`.`surname`
        
FROM 
            
`dienstbuch` as t1, `users`
        
WHERE 
            
`t1`.`sendPostTime` = (
                
SELECT 
                    MAX
( `sendPostTime` )
                
FROM 
                    
`dienstbuch`
                
WHERE 
                    
`changeOf` = `t1`.`id
                
GROUP BY 
                    
`changeOf` )
        AND 
            `
users`.`uidNumber` = `t1`.`user
Wodran liegt es, dass Beiträge 7 & 8 angezeigt werden, 4 aber nicht?
Zulakis ist offline   Mit Zitat antworten
Alt 08.11.2011, 14:02  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Also das Group by müsstest du auch weglassen können

EDIT: Tomaten auf den Augen
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 08.11.2011, 14:04  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mquadrat Beitrag anzeigen
Wozu das Subselect?

Code:
  select 
* from dienstbuch group
Um den aktuellsten Beitrag zu kriegen?
Zulakis ist offline   Mit Zitat antworten
Alt 08.11.2011, 14:05  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Da war ich noch beim denken und bin auf abschicken gekommen *peinlich*
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 08.11.2011, 14:43  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Hab das ganze so gelöst:
PHP-Code:
SELECT 
            
`t1`.`id` , `t1`.`user` , `t1`.`subject` , `t1`.`content` , `t1`.`sendPostTime` , `users`.`firstname` , `users`.`surname`
        
FROM 
            
`dienstbuch` as t1, `users`
        
WHERE 
            concat
t1.sendPostTimet1.changeOf ) = ANY(
                
SELECT 
                    CONCAT
MAXt1.sendPostTime ) , t1.changeOf )
                
FROM 
                    dienstbuch 
AS t1
                GROUP BY 
                    t1
.changeOf)        
        AND 
            `
users`.`uidNumber` = `t1`.`user
Gibt es da noch irgendeine bessere Lösung?
Zulakis ist offline   Mit Zitat antworten
Alt 08.11.2011, 16:20  
Erfahrener Benutzer
 
Registriert seit: 21.09.2010
Beiträge: 143
PHP-Kenntnisse:
Anfänger
Zulakis befindet sich auf einem aufstrebenden Ast
Standard

Ich möchte gerne bei der Beitragsanzeige einen Link zum vorherigen sowie nächsten Beitrag anzeigen.

$entry beinhaltet den aktuell angezeigten Eintrag.

PHP-Code:
            $sql "SELECT
                        *
                    FROM
                        dienstbuch
                    WHERE
                        changeOf != '" 
$entry["id"] ."'
                    AND
                        sendPostTime < '" 
$entry["sendPostTime"] . "'
                    LIMIT 1"

Gibt mir jetzt den ersten Eintrag zurück der vor dem angezeigten geschrieben wurde, nicht den der am nächsten dran ist. Gibt es da irgendeine einfache Möglichkeit oder muss ich mit subquerys ran?
Zulakis ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql abfrage in mysql abfrage tsunder Datenbanken 8 06.09.2011 16:42
[Erledigt] MySQL Abfrage über Funktion (2 Datenbanken)? markiloy PHP Einsteiger 4 31.08.2011 23:30
Bewertungssystem im Forum tr0y Board-Support 74 03.08.2011 08:54
[Erledigt] MySQL Abfrage mit mehreren Keywörtern inox PHP Einsteiger 16 15.02.2011 18:18
MYSQL Abfrage von 4 Datenbanken da_mike PHP Einsteiger 47 08.02.2011 15:02
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
MySQL Abfrage nur jeweils eine Ausgabe Hawk PHP Tipps 2007 15 19.02.2007 00:35
MySQL Abfrage von Ver. 5 für Ver 3. des MySQL Servers FireFIghter Datenbanken 3 02.02.2007 17:18
MySQL Abfrage macht Seite langsam Datenbanken 11 19.10.2006 19:38
MySQL - Abfrage: Unterschiedliche Ergebnisse aus PHP/manuell horstenpeter Datenbanken 3 16.07.2006 13:22
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
komplizierte mySQL Abfrage Datenbanken 6 25.06.2004 15:34
[Erledigt] mysql Abfrage Datenbanken 5 18.06.2004 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql aktuellsten beitrag, mysql nummer aktuellsten jeweils, mysql group by nur die aktuellsten

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum