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)
[MySQL 4.0] Planlos: Kaskadiertes Select? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[MySQL 4.0] Planlos: Kaskadiertes Select?


 
dwirt
16-10-2003, 17:13 
 
Mal wieder so 'ne blöde Newbie Frage....

Ich habe eine Tabelle mit Usern und eine Tabelle mit Artikeln.
Dazu eine Tabelle wo ich user_id's und artikel_id's einander zuordne (2 spalten)
Jetzt will ich alle artikelstammsätze für einen bestimmten user bekommen.

Also quasi

SELECT article_id from user_article where user_id='1234567'

und mit dem ergebnis folgende query anstossen:

SELECT * from articles where article_id='$alle_article_ids_von_oben'

Ich denke das ist ein Standardfall, den man bestimmt mit einer Abfrage mittels JOIN lösen kann, aber ich blick's einfach nicht, und weiß auch nicht so recht, wie man nach sowas suchen soll.....

Danke für Eure Hilfe
Dennis

 
TobiaZ
16-10-2003, 17:26 
 
SELECT *
FROM articles a
LEFT JOIN users u on id
WHERE u.id = xxx

 
dwirt
16-10-2003, 17:32 
 
Wow, das ging ja flott ;-))

Vielen Dank, ich probier's gleich mal aus - und dann werd' ich mal versuchen das mit dem JOIN endlich mal zu blicken.....

THX
Dennis

 
dwirt
16-10-2003, 18:05 
 
TobiaZ,

wenn Du noch Zeit und Lust hast:

>>SELECT *
>>FROM articles a
>>LEFT JOIN users u on id
>>WHERE u.id = xxx

Die Tabelle die ich abfrage heißt "users_articles",
das abzufragende Feld heißt "artikelid".

In den Artikelstammdaten heißt das korrespondierende Feld NUR "id". Ist das ein Problem? Sollte ich das in "artikelid" umbenennen?

Folglich sollte das m.E. heißen

SELECT *
FROM articles a
LEFT JOIN users_articles u on id (oder articleid??)
WHERE u.userid = xxx

Wofür ist das Konstrukt "articles a" gut? Ein Alias? Aber wofür? Kann ich da auch die Tabellennamen direkt nehmen?

Fragen über Fragen....

Vielen Dank
Dennis

 
TobiaZ
16-10-2003, 19:33 
 
Okay, dein Post zeigt mir, dass du dich schon damit beschäfftigt hast, es nur leider noch nicht ganz blickst. aber unter den Umständen hilft man ja gerne.

Sorry, die Syntax oben waren ohnehin falsch. Statt on müsste ja USING(id) dahin. war eben nur schnell getippt.

SELECT * // das all solltest du noch spezialisieren
FROM artikel AS a // ja, das ist ein alias
LEFT JOIN user AS u // aliasse nicht zu verwenden bedeutet mehr schreibarbeit ON a.id = u.artid
WHERE u.id = xxx

 
TBT
16-10-2003, 20:10 
 
@Tobiaz:

lass mal die "AS" weg, das ist nicht ANSI konform, und außerdem unnötig !
Der MS-SQL Server haut dir bei "AS" zB auf die Finger :D

 
TobiaZ
16-10-2003, 20:15 
 
Oh, wollte verdeutlichen, dass es Aliasse sind. An MS hatte ich net gedacht.

 
dwirt
17-10-2003, 09:58 
 
Ich hab's dann gestern abend doch noch geblickt :-))))))

Für alle anderen Anfänger da draussen:
Das Konstrukt:

SELECT *
FROM table1,table2
WHERE table1.articleid=table2.id
AND table1.userid=xxx

macht genau das was ich will - verbindet die Datensätze der zwei Tabellen über id und articleid und selektiert über die userid der tabelle1.

Danke Euch allen für Eure Hilfe!
Dennis

 
TobiaZ
17-10-2003, 15:23 
 
select * benutzt man trotzdem nicht! Hier wird jede einzelne spalte extra angesprochen!

 
dwirt
18-10-2003, 21:14 
 
DAS weiß ich ;-)
Die brauche ich aber in dem Fall auch alle...

Trotzdem nochmal Danke!

Dennis

 
TobiaZ
19-10-2003, 13:16 
 
Die brauche ich aber in dem Fall auch alle... EGAL! Macht man trotzdem NICHT!


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