Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Abfrage - join, inner join, distinct?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Abfrage - join, inner join, distinct?

    Hallo,

    habe ein phpbb Forum. Ich möchte im Userprofil die Beiträge eines users anzeigen lassen. Dazu habe ich eine Inner join Abfrage geschrieben welche funktioniert:

    PHP-Code:
    $sql "SELECT 
    phpbb_topics.topic_poster, 
    phpbb_topics.topic_time, 
    phpbb_topics.topic_id, 
    phpbb_topics.topic_title, 
    phpbb_users.username, 
    phpbb_users.user_id

    FROM phpbb_topics
    INNER JOIN phpbb_users ON ( phpbb_topics.topic_poster = phpbb_users.user_id ) 
    WHERE phpbb_topics.topic_poster = 
    $user_ID
    ORDER BY phpbb_topics.topic_id DESC 
    LIMIT 0 , 10
        "


    Soweit so gut, nun muss ich aber eine weitere Abfrage einbauen, welche überprüft ob der User welcher sich das Profil ansieht, Die Kategorien wo sich die Themen befindet sehen darf. Er soll also nur die Topics sehen, für welche Kategorie er das Recht besitzt.

    Deswegen habe ich über der Abfrage folgenden Code:

    PHP-Code:
    $sql_auth "SELECT * FROM "FORUMS_TABLE;
    if( !
    $result_auth $db->sql_query($sql_auth) )
    {
        
    message_die(GENERAL_ERROR'could not query forums information.'''__LINE____FILE__$sql_auth);
    }
    $forums = array();
    while( 
    $row_auth $db->sql_fetchrow($result_auth) )
    {
        
    $forums[] = $row_auth;
    }
    $db->sql_freeresult($result_auth);

    $is_auth_ary = array();
    $is_auth_ary auth(AUTH_ALLAUTH_LIST_ALL$userdata);

    $except_forums '\'start\'';
    for( 
    $f 0$f count($forums); $f++ )
    {
        if( (!
    $is_auth_ary[$forums[$f]['forum_id']]['auth_read']) || (!$is_auth_ary[$forums[$f]['forum_id']]['auth_view']) )
        {
            if( 
    $except_forums == '\'start\'' )
            {
                
    $except_forums $forums[$f]['forum_id'];
            }
            else
            {
                
    $except_forums .= ','$forums[$f]['forum_id'];
            }
        }
    }

    $where_forums = ( $special_forums == '0' ) ? 'phpbb_forums.forum_id NOT IN ('$except_forums .')' 'phpbb_forums.forum_id NOT IN ('$except_forums .') AND phpbb_forums.forum_id IN ('$forum_ids .')'

    die neue Abfrage mit der variable $where_forums sieht dann so aus:

    PHP-Code:
    $sql "SELECT 
    phpbb_topics.topic_poster, 
    phpbb_topics.topic_time, 
    phpbb_topics.topic_id, 
    phpbb_topics.topic_title, 
    phpbb_users.username, 
    phpbb_users.user_id

    FROM phpbb_topics
    INNER JOIN phpbb_users ON ( phpbb_topics.topic_poster = phpbb_users.user_id ) 
    WHERE 
    $where_forums AND phpbb_topics.topic_poster = $user_ID
    ORDER BY phpbb_topics.topic_id DESC 
    LIMIT 0 , 10
        "

    Dies funktioniert aber nicht. Die $auth Abfrage ist korrekt, dass weiss ich. Nur die SQL Abfrage ist falsch.

    Error

    PHP-Code:
    could not obtain main information.

    DEBUG MODE

    SQL Error 
    1109 Unknown table 'phpbb_forums' in where clause

    SELECT phpbb_topics
    .topic_posterphpbb_topics.topic_timephpbb_topics.topic_idphpbb_topics.topic_titlephpbb_users.usernamephpbb_users.user_id FROM phpbb_topics INNER JOIN phpbb_users ON phpbb_topics.topic_poster phpbb_users.user_id WHERE phpbb_forums.forum_id NOT IN ('start') AND phpbb_topics.topic_poster 2 ORDER BY phpbb_topics.topic_id DESC LIMIT 0 10 

    Ich mache glaube ich auch einen Denkfehler. Ich muss die phpbb_forums wohl noch wo einbinden?

    Würd mich freuen wenn mir jemand hilft!

    Grüße
    Peter

  • #2
    Hast du bereits versucht, phpbb_forums gleich am Anfang der Abfrage mit einzubinden? ->
    PHP-Code:
    $sql "SELECT  
    phpbb_topics.topic_poster,  
    phpbb_topics.topic_time,  
    phpbb_topics.topic_id,  
    phpbb_topics.topic_title,  
    phpbb_users.username,  
    phpbb_users.user_id
    phpbb_forums.forum_id

    FROM phpbb_topics, phpbb_forums
    INNER JOIN phpbb_users ON ( phpbb_topics.topic_poster = phpbb_users.user_id )  
    WHERE phpbb_topics.topic_poster = 
    $user_ID 
    ORDER BY phpbb_topics.topic_id DESC  
    LIMIT 0 , 10 
        "

    Kommentar


    • #3
      Moin

      weis ja nicht obs hilft, aber dein Join sah mir merkwürdig aus...

      PHP-Code:
      $sql="SELECT a.topic_poster, a.topic_time, a.topic_id, a.topic_title, b.username, b.user_id , c.*
      FROM phpbb_topics as a 
      INNER JOIN phpbb_users as b ON  a.topic_poster = b.user_id 
      inner join phpbb_forums as c
      WHERE c.forum_id NOT IN ('start') 
      AND a.topic_poster = 2 
      ORDER BY a.topic_id DESC LIMIT 0 , 10  "

      geht zumindestesn in unserem Forum Fehlerfrei, ob das ergebniss das ist was du suchts, habe ich jetzt nicht geprüft

      Grüße
      Egal wie tief man die geistige Messlatte auch hängen mag, jeden Tag findet sich einer, der aufrecht darunter durchlaufen kann.

      Kommentar

      Lädt...
      X