Hallo,
ist es möglich, innerhalb von MySQL Fremdschlüssel (ID) von einer Tabelle (Freunde) in einer anderen Tabelle (Sender) zu verwenden?
Beispiel: Lade Beiträge von Freunde
Freunde
- id_user (eigene ID)
- id_friend
Beiträge
- id_beiträge
- beiträge_werte
...
Sender
- id_beiträge
- id_user
- sender_zeit
MySQL sollte nun folgendes machen:
Lade die IDs von meinen Freunden und verwende diese als IDs für die Tabelle "Sender" mit den Limit 10 (Sortiert nach sender_zeit (die 10 letzten Beiträge)) und gebe die IDs von Beiträgen an die Tabelle "Beiträge" weiter.
Ist das i.wie machbar? Oder muss ich das mit PHP lösen?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fremdschlüssel von einer Tabelle in einer anderen Tabellen verwenden
Einklappen
Neue Werbung 2019
Einklappen
X
-
Condor93 hat ein Thema erstellt Fremdschlüssel von einer Tabelle in einer anderen Tabellen verwenden.Fremdschlüssel von einer Tabelle in einer anderen Tabellen verwenden
Stichworte: -
-
Ob der Query richtig ist kann ich dir nicht sagen, weil deine Beschreibung zu ungenau war bzw. ich sie nicht ganz verstanden habe. Bekommst du die richtigen Ergebnisse zurück?
Ansonsten worauf dich rkr offenbar noch hinweisen will ist die explizite JOIN-Syntax. Derzeit hast du drei Tabellen bei "FROM" stehen, im schlimmsten Fall wird da alles mit allem verknüpft (Kartesisches Produkt). Das heißt du bildest zuerst eine riesige Ergebnismenge, filterst dann aber mit deiner WHERE-Bedingung (fast) alles wieder weg. Das ist natürlich nicht ideal (von der Performance). Unter Umständen erkennt der Query Optimizer von MySQL was du eigentlich meinst und arbeitet intern mit einem JOIN, auch wenn du keinen explizit angegeben hast. Wenn du aber explizit die JOIN-Syntax verwendest, dann verwendet MySQL auch ganz sicher die JOINs.
Zur Performance: Du magst vielleicht sagen das die nicht so wichtig ist, allerdings kann das da schnell ins Gewicht fallen. 1000*1000*1000 Zeilen sind schon 1 Milliarde.
-
Warum beschäftigst du uns dann wenn du glaubst bereits zu wissen, wie man es richtig macht?
Einen Kommentar schreiben:
-
Ich arbeite nur so. Sollte aber wahrscheinlich richtig so sein. Das Problem lag aber nicht wirklich an den Fremschlüsseln, wie Tropi schon sagte eher an das joinen^^
Einen Kommentar schreiben:
-
Also
SELECT *
FROM freunde as fr, sender as se, beiträge as bt
WHERE fr.id_us = $variable
AND se.id_user = fr.id_us
AND bt.id_beiträge = se.id_beiträge
ORDER BY se.sender_zeit DESC
LIMIT 10
Richtig? xD
Einen Kommentar schreiben:
-
Wenn ich dich richtig verstehe, ist das kein Problem mit Fremdschlüsseln, sondern eine Sache des JOINens. Also in deinem Fall müsstest du eben irgendwie Freunde und Sender joinen. Es ist aber kein Problem, das du z.B. sowas machst:
SELECT * FROM freunde JOIN sender ON freunde.id_friend = sender.id_user
Einen Kommentar schreiben:
Einen Kommentar schreiben: