php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 05-11-2008, 18:58
DerEsWissenWill
 Registrierter Benutzer
Links : Onlinestatus : DerEsWissenWill ist offline
Registriert seit: Feb 2003
Beiträge: 61
DerEsWissenWill ist zur Zeit noch ein unbeschriebenes Blatt
Standard Unknown column 'number' in 'where clause'

Moin an alle,

ich habe das folgende Problem:


PHP-Code:
SELECT DISTINCT tabelle1.ID1,
tabelle1.TEXT1,
tabelle2.TEXT2,
COUNT(tabelle3.ID3) AS number
FROM tabelle1
LEFT JOIN tabelle2
ON tabelle1
.ID1=tabelle2.ID2
LEFT JOIN tabelle3
ON tabelle1
.ID1=tabelle3.ID3
WHERE tabelle2
.ID2>=0
AND number=0
GROUP BY tabelle1
.ID1
ORDER BY tabelle1
.TEXT1 ASC 

Wenn ich das "AND number=0" weglasse, wird mir die Spalte ausgegeben und ich kann darauf zugreifen. Das "AND number=0" als WHERE gibt aber die Fehlermeldung, dass es die Spalte nicht gibt. Warum? Wie kann ich das lösen?

Danke für Hilfe!!!
Martin
Mit Zitat antworten
  #2 (permalink)  
Alt 05-11-2008, 19:01
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

versuchs mal mit
PHP-Code:
SELECT DISTINCT tabelle1.ID1,
tabelle1.TEXT1,
tabelle2.TEXT2,
COUNT(tabelle3.ID3) AS number
FROM tabelle1
LEFT JOIN tabelle2
ON tabelle1
.ID1=tabelle2.ID2
LEFT JOIN tabelle3
ON tabelle1
.ID1=tabelle3.ID3
WHERE tabelle2
.ID2>=0
AND COUNT(tabelle3.ID3) = 0
GROUP BY tabelle1
.ID1
ORDER BY tabelle1
.TEXT1 ASC 
das Problem hatte ich auch schonmal, hab es damit aber lösen können
Mit Zitat antworten
  #3 (permalink)  
Alt 05-11-2008, 19:06
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Die COUNT() Funktion wird erst nach WHERE ausgeführt, du kannst also nicht einen Wert verwenden, der noch gar nicht existiert.

Du brauchst HAVING.
Mit Zitat antworten
  #4 (permalink)  
Alt 05-11-2008, 19:06
DerEsWissenWill
 Registrierter Benutzer
Links : Onlinestatus : DerEsWissenWill ist offline
Registriert seit: Feb 2003
Beiträge: 61
DerEsWissenWill ist zur Zeit noch ein unbeschriebenes Blatt
Standard Da geht er!

Ich werd wahnsinnig! Das hatte ich schon getestet, ging nicht. Jetzt geht es... Danke Dir.
Mit Zitat antworten
  #5 (permalink)  
Alt 05-11-2008, 19:09
DerEsWissenWill
 Registrierter Benutzer
Links : Onlinestatus : DerEsWissenWill ist offline
Registriert seit: Feb 2003
Beiträge: 61
DerEsWissenWill ist zur Zeit noch ein unbeschriebenes Blatt
Standard Doch nicht

Ne quatsch, stop! Das hatte ich nicht gemacht und das liefert auch nicht das Ergebnis. Die Summe der Spalte muss ja 0 sein. ich hatte an der Stelle direkt "COUNT(tabelle3.ID3)=0" getestet. Das gibt aber einen GROUP BY Fehler.
Mit Zitat antworten
  #6 (permalink)  
Alt 05-11-2008, 19:14
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wie lautet die genaue Fehlermeldung?
Mit Zitat antworten
  #7 (permalink)  
Alt 05-11-2008, 19:14
DerEsWissenWill
 Registrierter Benutzer
Links : Onlinestatus : DerEsWissenWill ist offline
Registriert seit: Feb 2003
Beiträge: 61
DerEsWissenWill ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, ich stehe auf dem Schlauch. Mein Problem ist da noch, dass das DISTINCT (also GROUP BY) ja über tabelle1.ID1 läuft. Das HAVING aber dann doch auf tabelle3... Geht das trotzdem? Mein "Schnelltest" ist fehlgeschlagen ;-(

Hätte mir das so vorgestellt:

PHP-Code:
SELECT DISTINCT tabelle1.ID1,
tabelle1.TEXT1,
tabelle2.TEXT2,
COUNT(tabelle3.ID3) AS number
FROM tabelle1
LEFT JOIN tabelle2
ON tabelle1
.ID1=tabelle2.ID2
LEFT JOIN tabelle3
ON tabelle1
.ID1=tabelle3.ID3
WHERE tabelle2
.ID2>=0
AND COUNT(tabelle3.ID3) = 0
GROUP BY tabelle1
.ID1
HAVING number 
0
ORDER BY tabelle1
.TEXT1 ASC 
Mit Zitat antworten
  #8 (permalink)  
Alt 05-11-2008, 19:20
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Das COUNT() funktioniert (wie oben geschrieben) in WHERE nicht!!

Probier:
Code:
SELECT
    t1.ID1, t1.TEXT1, t2.TEXT2, COUNT(t3.ID3) AS number
FROM
    tabelle1 t1
LEFT JOIN
    tabelle2 t2 ON ( t1.ID1 = t2.ID2 )
LEFT JOIN
    tabelle3 t3 ON ( t1.ID1 = t3.ID3 )
WHERE
    t2.ID2 >= 0
GROUP BY
    t1.ID1, t1.TEXT1, t2.TEXT2
HAVING
    number > 0
ORDER BY
    t1.TEXT1 ASC
Was ich übrigens sehe, was bringt die Abfrage t2.ID2 >= 0? Eine ID darf eigentlich gar nicht 0 sein können.
Mit Zitat antworten
  #9 (permalink)  
Alt 05-11-2008, 19:22
DerEsWissenWill
 Registrierter Benutzer
Links : Onlinestatus : DerEsWissenWill ist offline
Registriert seit: Feb 2003
Beiträge: 61
DerEsWissenWill ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Aah geil, wenn ich das HAVING mit dem COUNT nehme, dann geht es. Danke!

Das >= steht da drin, weil in dem JOIN ein Hersteller gezogen wird. Und wenn der User "alle" gewählt hat, dann darf die ID da > 0 sein.

Danke noch mal...
Mit Zitat antworten
  #10 (permalink)  
Alt 05-11-2008, 19:24
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.635
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von DerEsWissenWill
Das >= steht da drin, weil in dem JOIN ein Hersteller gezogen wird. Und wenn der User "alle" gewählt hat, dann darf die ID da > 0 sein.
Warum dann >= wenns > sein soll?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

EJS TreeGrid ansehen EJS TreeGrid

EJS TreeGrid is DHTML component written in pure JavaScript to display and edit data in table, grid, tree view or grid with tree on HTML page

09.04.2019 coqsoft@ | Kategorie: JAVASCRIPT/ Components
Suchmaschine redaktionell, Branchenportal zum Geld verdienen

Programmbeschreibung Die Bezahl-Suchmaschine ist in Perl und PHP programmiert (eigenes CGI-Verzeichnis notwendig), benötigt PHP aber keine MySQL-Datenbank. Webmaster haben mit dieser Suchmaschine neben der normalen kostenlosen Registrierung von Lin

06.04.2019 skripte@ | Kategorie: PHP/ Suchmaschinen
Oog Photo-Video-Gallery

Mit Oog Photo-Gallery können Sie einfach und stilvoll Bilder (auch Video & Audio) auf Ihrem PHP5-Webserver veröffentlichen und verwalten. Lizenz: GNU GPL v2

06.04.2019 trottbrand@ | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:11 Uhr.