Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Left Join Problem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Left Join Problem


 
Michael8576
06-12-2007, 15:11 
 
$sql = "SELECT a.*, b.* FROM announce a LEFT JOIN attachment b ON (a.id = b.messageID)
WHERE b.messageType = 'announceAttachment' AND b.isImage = 1 AND a.frei = 1
AND a.cat = ".$_REQUEST['catID'];

Klappt so wunderbar die Abfrage solange nur 1 Treffer in der Tabelle attachment erfolgt.

Nun zu meinem Problem:

- wie kann ich Tabelle attachment zwingen nur einen Eintrag zu holen
- wenn in attachment kein Treffer erfolgt wird mir garnichts angezeigt

 
TobiaZ
06-12-2007, 17:52 
 
steht hier drin:
http://www.php-resource.de/forum/showthread.php?s=&threadid=28292

 
Michael8576
06-12-2007, 23:24 
 
Das habe ich mir schon durchgelesen bekomme es damit aber nicht hin.
Die Beispiele beziehen sich ja mehr auf USING das ich aber nicht nutzen kann.
Noch dazu habe ich noch nicht soviel mit JOIN gemacht :(

Verstehe ja das solche Fragen auf dauer nerven.

 
IchBinIch
07-12-2007, 17:36 
 
Das ist eigentlich ganz einfach.

Das Beispielalle quadrate auslesen und die wurzel dazu, sofern vorhanden sollte dir helfen.

Und USING() kannst du natürlich auch einfach mit ON x=y ersetzen.

 
Michael8576
07-12-2007, 20:31 
 
OK habe es nun hinbekommen das er mir auch anzeigt wenn in der 2ten Tabelle kein Treffer vorhanden ist.

$sql = "SELECT a.*, b.* FROM attachment b RIGHT JOIN
announce a ON a.id = b.messageID AND b.messageType = 'announceAttachment'
AND b.isImage = 1 WHERE frei = 1 AND cat = ".$_REQUEST['catID']

Und ich bekomme immer noch alle Einträge von attachment obwohl ich da nur den ersten möchte.
Setze ich ein Limit gilt das ja für alle das heißt er holt mir ja dann generell nur die die ich als Limit angebe.

Habe das gefunden und weis nicht ob es richtig ist bzw. wie ich es anwenden muß das kenne ich garnicht.

http://archives.postgresql.org/pgsql-general/2006-10/msg01540.php

 
Michael8576
07-12-2007, 21:32 
 
Habe es hinbekommen.

$sql = "SELECT a.*, b.* FROM attachment b
RIGHT JOIN announce a
ON a.id = b.messageID AND b.messageType = 'announceAttachment' AND b.isImage = 1
WHERE frei = 1 AND cat = ".$_REQUEST['catID']." GROUP BY messageID ORDER BY datum DESC";

 
Michael8576
08-12-2007, 17:02 
 
Hallo, leider klappt es doch nicht richtig mit meiner Abfrage.

Wenn in der zu dem Eintrag in der Tabelle announce kein Anhang in Tabelle attachment vorhanden ist, dann liest er mir nur einen Eintrag ohne Anhang aus obwohl mehrere vorhanden sind.

Gibt es allerdings ein oder mehrere Anhänge für Announce klappt es wunderbar.

Ich sehe nur den Fehler nicht wieso er mir da nur einen Treffer zeigt und nicht alle.

$sql = "SELECT a.*, b.*, count(b.attachmentID) AS wieviele
FROM attachment b RIGHT JOIN announce a
ON a.id = b.messageID AND b.messageType = 'announceAttachment'
WHERE a.frei = 0 GROUP BY b.messageID ORDER BY a.datum DESC";

 
ghostgambler
09-12-2007, 10:37 
 
GROUP BY b.messageID -> GROUP BY a.messageID

 
Michael8576
09-12-2007, 12:21 
 
Ich habe es jetzt mit UNION lösen können.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:12 Uhr.