Datenbanktabellen verknüpfen [mysql]

Rene

wusaa
ID: 44966
L
30 April 2006
412
13
moin, ich bin grad eine datenbank am zerstückeln und am reorganisieren...
(sprich normalisieren (schlimmes wort, denn normal bin ich nicht ^^))

ich teste das ganze erstmal offline mit MS access, allerdings klappt da irgendetwas nicht?!?

wie kann ich diese Tabellen Verknüpfen?
USER_UPLOADS
user_id
upload_id (PK)
ip

USER
user_id (PK)
user_nick
user_ip

STATISTIK
upload_id (PK)
view
vote
punkte


PK = Primärer Key

jetzt möchte ich mir folgendes anzeigen lassen:
USER.user_nick || USER.user_ip || STATISTIK.view || STATISTIK.vote || STATISTIK.punkte

order by STATISTIK.view

mein Versuch:
Code:
[B]SELECT [/B]
USER_UPLOADS.user_id, USER_UPLOADS.upload_id, USER.user_id, USER.user_nick, USER.user_ip, STATISTIK.upload_id, STATISTIK.view, STATISTIK.vote, STATISTIK.punkte
[B]FROM [/B]
STATISTIK, USER_UPLOADS, USER 
[B]WHERE [/B]
USER_UPLOADS.user_id = USER.user_id AND USER_UPLOADS.upload_id = STATISTIK.upload_id 
[B]ORDER BY [/B]
STATISTIK.view

Fehlermeldung:
Im Ausdruck stimmt ein Dateityp nicht überein...allerdings sollte zu jedem Dateityp auch der entsprechende Gegenwert vorhanden sein. bzw. ich hab es ja so testweise eingerichtet...
wo kann der Fehler liegen?
Zudem ist die Abfrage so ok, oder bekommt ihr das Würgen, da weder in JOIN etc. im Ausdruck mit drin ist?
wie kann es eleganter/effektiver gelöst werden?
Vielen DANK!
MfG René
 
Zuletzt bearbeitet:
Ich würde hier zweimal einen INNER-Join nehmen:

Code:
SELECT USER_UPLOADS.user_id, USER_UPLOADS.upload_id, USER.user_id, USER.user_nick, USER.user_ip, STATISTIK.upload_id, STATISTIK.view, STATISTIK.vote, STATISTIK.punkte FROM USER
INNER JOIN USER_UPLOADS ON USER_UPLOADS.user_id = USER.user_id
INNER JOIN STATISTIK ON USER_UPLOADS.upload_id = STATISTIK.upload_id ORDER BY STATISTIK.view

Denkansatz sollte anhand vom Code klar werden ;)

[meiner Meinung nach gehören Tabellennamen eigtl. kleingeschrieben sowie meistens Aliase vergeben]
 
Hallo

ich teste das ganze erstmal offline mit MS access

Da in dem Titel deines Beitrags "mysql" steht, macht es überhaupt keinen Sinn, das ganze in MS Access zu testen. Der SQL-Syntax von Access und MySQL ist nicht identisch. Also wenn es unter MS Access geht, ist die Chance für ein Nicht-Funktionieren in MySQL sehr groß und umgedreht.

Wenn du es für MySQL brauchst, dann musst du zum testen (auch zum offline testen) auch MySQL nehmen. Am besten die selbe Version, die dann auch online läuft. Wenn da noch PHP mit dranhängt, dann solltest du dir mal XAMPP anschauen.

Warum dein SQL-Code nicht funktioniert, kann ich nicht nachvollziehen. Sieht auf den ersten Blick ok aus. Sollte zumindest keine Fehlermeldung bringen.

Die Fehlermeldung ist dann wohl aus MS-Access. Und es soll bestimmt nicht "Dateityp" sondern "Datentyp" heißen. Wäre mal interessant, welche Datentypen die einzelnen Spalten haben. Wenn du die user_id bzw. die upload_id miteinernder vergleichst, dann müssen diese natürlich den selben Datentyp haben (also nicht String mit Int vergleichen).
 
also bei ms acess 07 kann ich das ganze auch mit mysql server verbinden, von daher ging ich ansich davon aus, dass es klappen sollte...
ich werd dann mal das ganze aufn server testen müssen :)
 
also bei ms acess 07 kann ich das ganze auch mit mysql server verbinden, von daher ging ich ansich davon aus, dass es klappen sollte...
ich werd dann mal das ganze aufn server testen müssen :)

Ok. Dann geht es natürlich. Ich bin davon ausgegangen, dass die Datenbank auch in Access lief.
 
So. Habs mir jetzt nochmal genauer angeschaut und mal nachgestellt. Und dabei ist mir folgendes aufgefallen:

Wenn die Tabellen user_uploads und statistik beide als Primary Key die upload_id haben, dann kann man beide Informationen in einer Tabelle zusammenfassen. Damit habe ich insgesamt nicht mehr 3 Tabellen sondern nur noch 2.

Ich habs mal nachgestellt. Hier der Code zum erzeugen der Tabellen (habs etwas vereinfacht, also fehlen ein paar Felder)
Code:
CREATE TABLE `user` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_nick` varchar(50) NOT NULL,
  `user_ip` varchar(50) NOT NULL,
  PRIMARY KEY  (`user_id`)
) 

CREATE TABLE `user_uploads` (
  `upload_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `punkte` int(11) NOT NULL,
  PRIMARY KEY  (`upload_id`)
)

Wie gesagt, ist etwas vereinfacht. Und jetzt liefert mir folgende Abfrage die Werte:
Code:
select 
    u.user_id, u.user_nick, u.user_ip, up.upload_id, up.punkte 
from user u, user_uploads up 
where up.user_id=u.user_id

Den Rest wirst du bestimmt selber ergänzen können.

Wenn deine Fehlermeldung tatsächlich etwas mit dem Datentyp anmerkt, dann mußt du mal drauf achten, welche Datentypen du verwendest. (Hatte ich weiter oben schon mal geschrieben.)