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)
Nochmal Problem mit Unterabfrage und mysql [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 :
Nochmal Problem mit Unterabfrage und mysql


 
Thommy
03-12-2001, 16:23 
 
Hallo an alle,

hatte ja schonmal sowas ähnliches gefragt - mir ist jetzt aber noch ein Problem bewusst geworden. Also nochmal es ging um folgendes:

Ich habe zunächst eine

Tabelle 1, welcher Daten von Personen enhält (also z.B. folgende Felder:user_id, Nachname, Vorname, Geburtsdatum)

Tablle 2 enhält nun die Fremdsprachenkenntnisse dieser Personen (also z.B. folgende Felder: id, user_id, sprache)

Nun möchte ich eine Abfrage starten, die mir alle Personen zeigt welche Schmidt heißen und irgendeine Fremdsprache können. (also: die entsprechenden Personen haben mind einen Eintrag in der zweiten Tabelle - können aber auch mehr sein)

Normalerweise würde ich das so machen:

SELECT user_id Name, Vorname FROM tabelle1 WHERE EXISTS (SELECT * FROM TABELLE2 WHERE tablle1.user_id=tabelle2.user_d)

Wenn ich

SELECT tabelle1.user_id, tabelle1.name, tabelle1.vorname, tabelle2.user_id FROM tabelle1, tabelle2 WHERE tablle1.user_id=tabelle2.user_d

mache werden bei leuten welche mehrere Fremdsprachen (zb.3)
auch dementsprechnd viele Datensätze augegeben. Dies soll aber nicht sein - will ja nur sehen wer überhaupt eine kann.


Wie würdet ihr das machen?


Dankeschön im vorraus!!!!


Thommy

 
Thommy
03-12-2001, 17:03 
 
Achja hab ich ganz vergessen,

und wie würdet ihr es machen wenn ich noch ne dritte Tabelle hätte, welche Programmierkenntnisse enthält (z.B. user_id, programmiersprache)

und ich alle Leute angezeigt haben möchte welche mindestens 1 Fremdsprache und 1 Programmiersprache können.

(in meinem eigentlichen System könnten das noch mehr Tabllen sein)

 
Sky
03-12-2001, 17:20 
 
SELECT tabelle1.user_id, tabelle1.name, tabelle1.vorname, tabelle2.user_id FROM tabelle1, tabelle2 WHERE tabelle1.user_id=tabelle2.user_id AND tabelle2.sprache<>0

 
Thommy
03-12-2001, 17:31 
 
hatte wohl vergessen noch dazuzuschreiben, dass user welche keine Fremdsprache können gar keinen Datensatz in Tabelle2 haben (user welche 3 können haben halt 3 Datensätze). Also die Abfrage muss irgendwie bei alles usern(tabelle1)prüfen, ob diese überhaupt in Tabelle2 vorkommen

Danke un Gruss

Thommy

 
Sky
03-12-2001, 17:35 
 
Ich würde das auf ein einziges binäres Feld umstellen. Und es immer noch in die Usertabelle mit reinpacken, ich sehe immer noch keinen Vorteil in ner Extra-Table.

Das Feld also z.B.:

Schalterstellung: ----0/1----0/1----0/1
____Beschreibung: ----eng----fr-----esp


--> Feldinhalt 101 sagt uns einwandfrei und unkompliziert, dass derjenige Englisch und Spanisch kann.

[Editiert von Sky am 03-12-2001 um 17:38]

 
Thommy
03-12-2001, 18:15 
 
ja aber ich hab doch mehrere solche Tabellen. Z.B noch für Nationalität (man kan schließlich mehrere haben), Prgrammierkenntnisse in den und den Prgrammiersprache....

Wenn ich die Tabellen in eine packen würde, hätte diese hunderte von Feldern

 
Sky
03-12-2001, 18:41 
 
Na nun übertreib mal nicht! *g*
Außerdem ist das doch egal.

 
JoelH
04-12-2001, 04:07 
 
Sky, das ist absolut unökonomisch , mal angenommen du hast 1.000.000.000 Menschen und jeder spricht nur 3 bis 4 Sprachen von 5000, dann hast du absolut unnötig viele Nullen in der Deiner DB !
Natürlich ist dies jetzt ein Beispiel mit sehr grossen Datenmengen, aber wer bei kleinen Sachen schon schludert wird bei grossen Sachen nicht minder schludern ! Weisst wielange ich gebracht hab mir Spaghetti Code ab zu gewöhnen ? Grausam lange !

[Editiert von JoelH am 04-12-2001 um 04:10]

 
Thommy
04-12-2001, 09:51 
 
Was haltet Ihr davon:

meine 2.Variante einfach erweitert um


GROUP by tabelle1.user_id


und schon wird nur ein DS angezeigt

 
Sky
04-12-2001, 17:31 
 
Original geschrieben von JoelH
Sky, das ist absolut unökonomisch , mal angenommen du hast 1.000.000.000 Menschen und jeder spricht nur 3 bis 4 Sprachen von 5000, dann hast du absolut unnötig viele Nullen in der Deiner DB !
Natürlich ist dies jetzt ein Beispiel mit sehr grossen Datenmengen, aber wer bei kleinen Sachen schon schludert wird bei grossen Sachen nicht minder schludern ! Weisst wielange ich gebracht hab mir Spaghetti Code ab zu gewöhnen ? Grausam lange !

Das ist natürlich ein Argument - Bei DB-Planung berücksichtige ich aber immer die voraussichtliche Maximalgröße des Datenumfangs... Und greife bei kleineren immer gerne auf die Quick'n'Dirty Lösung zurück.

Asche über mein Haupt. :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:06 Uhr.