php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.01.2010, 08:04  
Neuer Benutzer
 
Registriert seit: 28.01.2010
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
Trallalla befindet sich auf einem aufstrebenden Ast
Standard eintrag nur wählen wenn zugehöriger eintrag in anderer tabelle.

Hallo Forengemeinde,

folgender Bestand:
Ich hab eine Tabelle "user" mit feldern "user_id", "name" und "active".
Eine zweite Tabelle "photo" mit "user_id", "filename" und "active".

In Tabelle Photo können zu jedem User gar keine bis mehrere Einträge vorhanden sein.
Nun möchte ich die User auswählen, zu denen mindestens ein Eintrag in Tabelle Photos vorhanden ist.

Meine Lösung sieht folgendermaßen aus:
Code:
SELECT
user.user_id FROM user ,photo 
WHERE user.user_id 
IN (SELECT photo.user_id FROM photo WHERE active = 'Y') 
AND user.active = 'Y' 
ORDER BY user.user_id 
DESC LIMIT 0,24;
Das funktioniert, scheint mir jedoch ziemlich Server-lastig zu sein.
Gibt es eine elegantere Lösung?

Danke und Gruß, Ronny
Trallalla ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.01.2010, 08:21  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

Das ist serverlastig weil Du ein kartesisches Produkt generierst über einen full table scan der tabellen user und photo, dazu nochmal dann Dein subselect. Im Prinzip musst du nur die tabelle photo weglassen Du selektierst sowieso nichts daraus
HPR1974 ist offline   Mit Zitat antworten
Alt 28.01.2010, 09:10  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Versuchs mal mit dem Query:
Code:
SELECT    user.user_id
FROM       user
WHERE     (
    SELECT    photo.user_id
    FROM      photo
    WHERE    photo.user_id = user.user_id
        AND    photo.active = 'Y'
    LIMIT      1
) IS NOT NULL
    AND    user.active = 'Y'
ORDER BY user.user_id DESC
LIMIT       0, 24
draco88 ist offline   Mit Zitat antworten
Alt 28.01.2010, 09:33  
Neuer Benutzer
 
Registriert seit: 28.01.2010
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
Trallalla befindet sich auf einem aufstrebenden Ast
Standard

Ja, leuchtet ein.

Das Beispiel in phpmyadmin probiert liefert das gewünschte Ergebnis. Aber was meint Iht?

Zeige Datensätze 0 - 23 (24 insgesamt, die Abfrage dauerte 0.7604 sek.)

Ist dies bei einer Datenmenge von ca. 1.500 bei den usern und ca, 2.500 bei den Fotos vertretbar?

Sagen in jedem Fall schon mal Danke
Trallalla ist offline   Mit Zitat antworten
Alt 28.01.2010, 09:41  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.627
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Code:
SELECT DISTINCT u.user_id 
   FROM user u INNER JOIN photo p 
   ON p.user_id = u.user_id 
WHERE u.active = 'Y' 
ORDER BY u.user_id DESC
Was spricht denn gegen einen herkömmmlichen Join?
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 28.01.2010, 10:16  
Neuer Benutzer
 
Registriert seit: 28.01.2010
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
Trallalla befindet sich auf einem aufstrebenden Ast
Standard

Yep, das isses
0,03 sek

Daaaaanke Du bist mein Held des Tages
Trallalla 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
[Erledigt] User die in anderer Tabelle stehen ausblenden Creeping PHP Tipps 2009 4 13.09.2009 22:41
[Erledigt] MySQL Auswahl der vorhandenen IDs in einer Tabelle & dadurch auswahl ander Enra PHP Tipps 2009 11 20.03.2009 21:13
[Erledigt] Counts einer tabelle mit anzahl aus anderer addieren proud2be PHP Tipps 2009 8 19.01.2009 12:44
[Erledigt] Ein Wert aus anderer Tabelle auslesen? Ind3X PHP Tipps 2008 6 30.11.2008 13:36
Tabelle von anderer Website in eigene übernehmen (+aktualisieren) Softyx PHP Tipps 2008 31 07.07.2008 10:16
Eintrag in DB und Wechsel zu anderer Seite Darson PHP Tipps 2008 25 14.01.2008 16:46
SQL-Abfrage mit Wert aus anderer Tabelle füllen maeck Datenbanken 2 25.07.2007 20:36
ORDER BY ... aus anderer Tabelle? CHRIS Datenbanken 26 04.05.2007 20:24
where Abfrage in anderer Tabelle?? Matthiasnet Datenbanken 10 11.04.2007 17:35
Tabellenenum aus anderer Tabelle Datenbanken 3 11.05.2005 10:07
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
Datensätze löschen für die kein Eintrag in anderer Tabelle.. robo47 Datenbanken 7 10.11.2004 09:42
[Erledigt] Letzter Eintrag in einer Tabelle und Top Five einer Tabelle Datenbanken 2 27.09.2004 06:50
Verweis nach id-Vorgabe aus anderer Tabelle "ergänzen&a Heart PHP Tipps 2004 2 28.06.2004 08:02
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql count \zeige datensätze\, datensätze löschen, die in anderer tabelle stehen, php join anderer tabelle, sql eintrag löschen wen in anderer tabelle vorhanden, sql abfrage auf wert in anderer tabelle, order by eintrag, sql eintrag auswählen wenn er in anderer tabelle nicht existiert, sql abfrage werte aus einer tabelle nur wenn auch in zweiter tabelle vorhanden, select nur wenn nummer in anderer tabelle vorhanden, update mit werten aus anderer tabelle join, sql abfrage mit werte aus anderer tabelle, join eintrag in anderer tabelle existiert, php nur in einer tabelle, sql einträge tabelle andere tabelle vorhanden, order by mit nur einem eintrag, select wenn in einer der tabellen existiert, php tabellen verstecken, select nur wenn in andere tabelle werte vorhanden, sql \eintrag in anderer tabelle\

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:39 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