php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.04.2006, 13:56  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard Left outer join, timestamps

Hallo,

ich habe 2 Tabellen, eine mit Events eine mit Kommentaren. Es sollen nur Events angezeigt werden bei denen der letzte Kommentar in den letzten 14 Tagen verfasst wurde.

So weit bin ich:
SELECT e_events.id, bezeichnung, e_events.timestamp, max( e_kommentare.timestamp ) AS letzterkommentar, (
now( ) -00000014000000
) AS gestern
FROM `e_events`
LEFT JOIN e_kommentare ON e_events.id = e_kommentare.event_id
WHERE typ = 'tratsch' AND gestern > letzterkommentar
GROUP BY e_kommentare.event_id
ORDER BY `letzterkommentar` DESC
LIMIT 0 , 30

Fehler: Unknown column 'gestern' in 'where clause'

kann ich im SELECT-Teil erzeugte Spalten bei Left join abfragen nicht im WHERE-Teil verarbeiten?

Welche Lösungsansätze gibt es hierzu noch?
php-newbie83 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 23.04.2006, 15:25  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Wozu machst du den Teil ins SELECT? Wieso nicht in die Where-Klausel?

Also: WHERE typ='tratsch' AND NOW()-00000014000000 > letzterkommentar


Wobei das logisch etwas verkehrt ist, muss da nicht ein kleiner hin? Also dass der letztekommentar später als gestern ist?
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline   Mit Zitat antworten
Alt 24.04.2006, 19:55  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard

da ich beide abfragen brauche (über und unter 14 tagen) ist das </> erstmal egal.

die separate spalte habe ich gemacht, da ich mit (heute-14 tage) im where-teil nicht weiter kam.

da siehts so aus

Code:
 SQL-Befehl : 

SELECT e_events.id, bezeichnung, e_events.timestamp, max( e_kommentare.timestamp ) AS letzterkommentar
FROM `e_events`
LEFT JOIN e_kommentare ON e_events.id = e_kommentare.event_id
WHERE typ = 'tratsch' AND NOW( ) -00000014000000 < letzterkommentar
GROUP BY e_kommentare.event_id
ORDER BY `letzterkommentar` DESC
LIMIT 0 , 30

MySQL meldet:

#1054 - Unknown column 'letzterkommentar' in 'where clause'
was kann ich tun?
php-newbie83 ist offline   Mit Zitat antworten
Alt 25.04.2006, 18:44  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard

...anscheinend gar nicht so einfach...
php-newbie83 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:00  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

In der Where-Klausel sind Aliasbezeichner nicht bekannt, du musst also die Aggregatfunktion im WHERE wiederholen.
DiBo33 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:05  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard

SQL-Befehl :

SELECT e_events.id, bezeichnung, e_events.timestamp, max( e_kommentare.timestamp ) AS letzterkommentar
FROM `e_events`
LEFT JOIN e_kommentare ON e_events.id = e_kommentare.event_id
WHERE typ = 'tratsch' AND NOW( ) -00000014000000 < max( e_kommentare.timestamp )
GROUP BY e_kommentare.event_id
ORDER BY `letzterkommentar` DESC
LIMIT 0 , 30

MySQL meldet:

#1111 - Invalid use of group function
php-newbie83 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:07  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Du kannst nur gruppieren was du auch selektierst
DiBo33 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:18  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard

gleicher fehler

SQL-Befehl :

SELECT e_events.id, bezeichnung, e_events.timestamp, max( e_kommentare.timestamp ) AS letzterkommentar, e_kommentare.event_id
FROM `e_events`
LEFT JOIN e_kommentare ON e_events.id = e_kommentare.event_id
WHERE typ = 'tratsch' AND NOW( ) -00000014000000 < max( e_kommentare.timestamp )
GROUP BY e_kommentare.event_id
ORDER BY `letzterkommentar` DESC
LIMIT 0 , 30

MySQL meldet:

#1111 - Invalid use of group function
php-newbie83 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:24  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Nur nach Aggregatfunktionen kannst du nicht gruppieren.

Wenn du Aggregatfunktionen einsetzt müssen alle Felder die nicht einer Aggragatfunktion entsprechend in der GROUP Klausel aufgeführt werden.

MySQL ist da teilweise recht großzügig aber eben nicht immer.

In diesen Fall
GROUP BY e_kommentare.event_id, e_events.id, e_events.timestamp
DiBo33 ist offline   Mit Zitat antworten
Alt 25.04.2006, 19:27  
Benutzer
 
Registriert seit: 03.08.2004
Beiträge: 80
php-newbie83
Standard

DITO

SELECT e_events.id, bezeichnung, e_events.timestamp, max( e_kommentare.timestamp ) AS letzterkommentar, e_kommentare.event_id
FROM `e_events`
LEFT JOIN e_kommentare ON e_events.id = e_kommentare.event_id
WHERE typ = 'tratsch' AND NOW( ) -00000014000000 < max( e_kommentare.timestamp )
GROUP BY e_kommentare.event_id, e_events.id, e_events.timestamp
ORDER BY `letzterkommentar` DESC
LIMIT 0 , 30

MySQL meldet:

#1111 - Invalid use of group function
php-newbie83 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
WHERE-Clause im Left Join cycap Datenbanken 2 06.11.2007 11:06
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
LEFT OUTER JOIN auf Nicht-Tabelle inu Datenbanken 15 29.03.2007 20:21
[solved] LEFT JOIN - #1066 - Not unique table/alias moose Datenbanken 6 12.12.2006 06:41
[gelöst] LEFT JOIN und trotzdem nicht alle Sätze da?!? stefanjann Datenbanken 3 24.10.2006 11:32
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
[Erledigt] LEFT JOIN funtkioniert nicht richtig Datenbanken 3 19.10.2005 17:38
2 Tabellen: Left outer join??? Datenbanken 2 14.09.2005 13:11
[Erledigt] LEFT JOIN Problem Datenbanken 11 21.03.2005 16:36
[Erledigt] left outer join mit bedingung Datenbanken 2 04.03.2005 00:52
left outer join Problem Datenbanken 5 21.01.2005 17:25
den letzte(grösten) eintrag aus LEFT JOIN Datenbanken 2 24.07.2004 18:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
reference to undefined property elem[jquery.expando], mysql aggregatfunktionen in where clause, sql befehl nur den größten timestamp, mysql neuester timestamp, select * bei join, mysql aggregatfunktionen ergebnis in where-klausel, mysql join timestamp, höchsten timestamp in left outer join, sql outer join php max, mysql aggregatfunktionen timestamp, mysql left join on klausel, left outer join limit, left outer join mysql, mysql left outer join max, where timestamp neuester kommentar, join über timestamp, order by timestamp join mysql, mysql left outer join limit, sql befehle outer join, mysql left outer join drei tabellen

Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.