Ergebnis 1 bis 5 von 5

Thema: Kniffliges MySQL Problem

  1. #1
    Meister(in) Avatar von Teron Gerofied
    Registriert seit
    26.01.2008
    Ort
    serverraum
    Alter
    26
    Beiträge
    347
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard Kniffliges MySQL Problem

    Hello Leute,

    ich habe hier einen etwas kniffligen Denkanstoß für alle Pros unter Euch was MySQL Querys betrifft. Ich glaub ich bin grade etwas zu betrunken um das Problem in den Griff zu kriegen.

    Also folgendes:

    Ich habe 3 Tabellen:

    FRIENDS
    USERS
    TALKS

    Talks speichert Postings ab, die ausgegeben werden sollen.
    Users speichert Benutzerdaten ab, ganz normal.
    Friends speichert virtuelle Freunschaften zwischen zwei oder mehreren Benutzern ab.

    Ich habe einige Einträge in der Tabelle Talks und drei Benutzer.

    Benutzer ID 1 und 2 sind mit der Datenbank Friends miteinander verbunden:

    FRIEND_ID | USER_ID | USER_FRIEND_ID
    1 | 1 | 2

    Friend id ist eine Auto-Increment Variable
    User Id ist die Id des Benutzers der die Freundschaftsanfrage gestellt hat
    User Friend Id ist die Id des anderen nutzers der die Anfrage akzeptiert hat

    So nun will ich, dass alle Einträge aus TALKS die Nutzer 1 und 2 schreiben bei beiden ausgegeben werden. Bei benutzer 3 jedoch nicht, da der mit niemand befreundet ist...

    habe es bis dahin gebracht:

    SELECT t.*, u.user_firstname, u.user_lastname FROM talks AS t, users AS u, friends AS f WHERE (u.user_id = '$uid' AND u.user_id = t.user_id) OR (u.user_id = f.user_id AND f.user_id = t.user_id) OR (u.user_id = f.user_friend_id AND f.user_friend_id = t.user_id) ORDER BY t.talk_time DESC LIMIT $entry_count

    Bei Benutzer 1 und 2 wird auch alles richtig angezeigt nur benutzer 3 (der zu garkeinen der beiden eine verbidnung hat) werden alle einträge angezeigt + die eigenen

    Hat jemand von euch eine Lösung dieses Problems.

    Ricgtunge Datenbank Queries zu schrieben ist eindeutig mein Kryptonit.

    Lg
    Mathias
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    PHP-Code:
    if(isset($this) || !isset($this)){ // that's the question... 

  2. #2
    Pion
    Gast

    Standard AW: Kniffliges MySQL Problem

    Na dann warten wir doch heute erst mal noch ab, bis du ausgenüchtert bist und dann probierst es nochmal


    mfg

  3. #3
    Meister(in)
    Themenstarter
    Avatar von Teron Gerofied
    Registriert seit
    26.01.2008
    Ort
    serverraum
    Alter
    26
    Beiträge
    347
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard

    Ok Leute,

    ich hab mich nachdem ich nun wieder nüchtern bin wieder daran gewagt und bin soweit gekommen:

    SELECT t.user_id AS tuid, t.*, u.user_firstname, f.user_id AS F_USER_ID, f.user_friend_id AS F_USER_FRIEND_ID FROM
    talks AS t
    LEFT JOIN
    users AS u ON u.user_id = t.user_id
    LEFT JOIN
    friends AS f ON (f.user_id = $uid OR f.user_friend_id = $uid)
    WHERE
    t.user_id = f.user_friend_id

    dieser query findet zuverlässig allepostings von profilen mit denen man befreundet ist
    das problem ist nur, dass wenn ich auch alle eigenen einträge ausgeben will die so oft ausgegeben werden wie es freundes-verbindungen gibt

    tja soweit bin ich dann mal ^^

    brauche also immer noch hilfe

    Habe noch etwas dran bearbeitet und bin nun bei folgendem Code:

    Code:
    SELECT t.user_id, t.*, u.user_firstname, f.user_id AS F_USER_ID, f.user_friend_id AS F_USER_FRIEND_ID FROM
    talks AS t
    LEFT JOIN
    users AS u ON u.user_id = t.user_id
    LEFT JOIN
    friends AS f ON (f.user_id = $uid OR f.user_friend_id = $uid)
    WHERE
    t.user_id = f.user_id OR t.user_id = f.user_friend_id
    Da das ganze ein bisschen schwer zu beschreiben ist hab ich das ganze mal was var_dump ausgegeben, damit dass ev ein bisschen leichter nachzuvollziehen ist:

    Code:
    array(4) {
      [0]=>
      array(15) {
        [0]=>
        string(1) "2"
        ["user_id"]=>
        string(1) "2"
        [1]=>
        string(3) "142"
        ["talk_id"]=>
        string(3) "142"
        [2]=>
        string(1) "2"
        [3]=>
        string(10) "1291787499"
        ["talk_time"]=>
        string(10) "1291787499"
        [4]=>
        string(12) "Max schreibt"
        ["talk_text"]=>
        string(12) "Max schreibt"
        [5]=>
        string(3) "Max"
        ["user_firstname"]=>
        string(3) "Max"
        [6]=>
        string(1) "1"
        ["F_USER_ID"]=>
        string(1) "1"
        [7]=>
        string(1) "2"
        ["F_USER_FRIEND_ID"]=>
        string(1) "2"
      }
      [1]=>
      array(15) {
        [0]=>
        string(1) "1"
        ["user_id"]=>
        string(1) "1"
        [1]=>
        string(3) "140"
        ["talk_id"]=>
        string(3) "140"
        [2]=>
        string(1) "1"
        [3]=>
        string(10) "1291787438"
        ["talk_time"]=>
        string(10) "1291787438"
        [4]=>
        string(16) "Mathias schreibt"
        ["talk_text"]=>
        string(16) "Mathias schreibt"
        [5]=>
        string(7) "Mathias"
        ["user_firstname"]=>
        string(7) "Mathias"
        [6]=>
        string(1) "1"
        ["F_USER_ID"]=>
        string(1) "1"
        [7]=>
        string(1) "2"
        ["F_USER_FRIEND_ID"]=>
        string(1) "2"
      }
      [2]=>
      array(15) {
        [0]=>
        string(1) "1"
        ["user_id"]=>
        string(1) "1"
        [1]=>
        string(3) "140"
        ["talk_id"]=>
        string(3) "140"
        [2]=>
        string(1) "1"
        [3]=>
        string(10) "1291787438"
        ["talk_time"]=>
        string(10) "1291787438"
        [4]=>
        string(16) "Mathias schreibt"
        ["talk_text"]=>
        string(16) "Mathias schreibt"
        [5]=>
        string(7) "Mathias"
        ["user_firstname"]=>
        string(7) "Mathias"
        [6]=>
        string(1) "1"
        ["F_USER_ID"]=>
        string(1) "1"
        [7]=>
        string(1) "3"
        ["F_USER_FRIEND_ID"]=>
        string(1) "3"
      }
      [3]=>
      array(15) {
        [0]=>
        string(1) "3"
        ["user_id"]=>
        string(1) "3"
        [1]=>
        string(3) "141"
        ["talk_id"]=>
        string(3) "141"
        [2]=>
        string(1) "3"
        [3]=>
        string(10) "1291787487"
        ["talk_time"]=>
        string(10) "1291787487"
        [4]=>
        string(14) "Mario schreibt"
        ["talk_text"]=>
        string(14) "Mario schreibt"
        [5]=>
        string(5) "Mario"
        ["user_firstname"]=>
        string(5) "Mario"
        [6]=>
        string(1) "1"
        ["F_USER_ID"]=>
        string(1) "1"
        [7]=>
        string(1) "3"
        ["F_USER_FRIEND_ID"]=>
        string(1) "3"
      }
    }
    das in meinem letzten posting beschriebene problem liegt bei ["F_USER_ID"]

    wie man sieht wird der name "Mathias" 2 mal ausgegeben, der rest korrekt

    entfernt man nun "t.user_id = f.user_id OR" ganz unten werden die 2 "Mathias" einträge verschwinden
    entfernt man das "t.user_id = f.user_friend_id" werden nur mehr die zwei "Mathias" einträge stehen bleiben

    ich will es erreichen dass "Max" und "Mario" angezeigt werden und EINMAL "Mathias"

    Geschafft

    Code:
    SELECT t.user_id, t.*, u.user_firstname, f.user_id AS F_USER_ID, f.user_friend_id AS F_USER_FRIEND_ID FROM
    talks AS t
    LEFT JOIN
    users AS u ON u.user_id = t.user_id
    LEFT JOIN
    friends AS f ON (f.user_friend_id = t.user_id)
    WHERE
    t.user_id = $uid OR t.user_id = f.user_friend_id
    Geändert von Sweet_Angel (08.12.2010 um 16:02 Uhr)
    PHP-Code:
    if(isset($this) || !isset($this)){ // that's the question... 

  4. #4
    Pion
    Gast

    Standard AW: Kniffliges MySQL Problem

    Geht doch

    In Zukunft kann man noch den Beitrag editieren, dann ist es perfekt

  5. #5
    Meister(in)
    Themenstarter
    Avatar von Teron Gerofied
    Registriert seit
    26.01.2008
    Ort
    serverraum
    Alter
    26
    Beiträge
    347
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Kniffliges MySQL Problem

    Verdammt, zu früh gefreut ... es wird immer noch nicht richtig angezeigt ... bei user id 1 funktionierts aber bei 2 und 3 nicht mehr ...

    hat doch noch wer eine lösung ??

    EDIT:

    SOOO Leute, jetzt hab ichs aber ;-D

    Code:
    SELECT DISTINCT t.*, u.user_firstname FROM
    users AS u
    LEFT JOIN
    friends AS f
    ON
    (f.user_id = $uid OR f.user_friend_id = $uid)
    LEFT JOIN
    talks AS t ON (t.user_id = f.user_id OR t.user_id = f.user_friend_id OR t.user_id = $uid)
    WHERE
    u.user_id = t.user_id
    Geändert von Teron Gerofied (08.12.2010 um 15:02 Uhr)
    PHP-Code:
    if(isset($this) || !isset($this)){ // that's the question... 

Ähnliche Themen

  1. MySQL Problem
    Von kohlmarc im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 12
    Letzter Beitrag: 16.10.2010, 15:19
  2. PHP + MySQL Problem
    Von Walerik im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 35
    Letzter Beitrag: 09.10.2009, 15:50
  3. Mysql-Problem
    Von BendOr im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 5
    Letzter Beitrag: 22.08.2006, 16:03
  4. Kniffliges Problem für einen Anfänger! Bitte helfen!
    Von hilfesuchender im Forum HTML & CSS Forum
    Antworten: 5
    Letzter Beitrag: 01.12.2005, 21:20
  5. was kniffliges Xtra nur für euch :wink:
    Von HoLo im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 10.10.2004, 11:08

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •