Visualizzazione dei risultati da 1 a 6 su 6

Discussione: LEFT JOIN

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    274

    LEFT JOIN

    Salve, sto scrivendo un forum per il mio CMS, mentre scrivevo una query, mi sono accorto di una piccola svista...

    Codice PHP:
    $mysql->query("SELECT forum_topics.id AS `forum_topic_id`,
    forum_topics.forum_id,
    forum_topics.forum_cat_id,
    forum_topics.topic,
    forum_topics.author,
    forum_topics.date,
    forum_topics.last_post_uid,
    forum_topics.last_post_date,
    users.username
    FROM `forum_topics`
    LEFT JOIN `users` ON users.id = forum_topics.author
    WHERE `forum_id`='
    $id_forum'"); 
    Avrei bisogno di fare 2 LEFT JOIN, sulla stessa tabella `users`, una che mi ritorni l'username dell'autore del topic, la seconda invece mi deve ritornare l'username dell'ultimo utente che ha fatto un post in quel topic. Il problema è i dati sono contenuti nello stesso campo, users.username... e quindi non possono assumere contemporaneamente due valori diversi.

    Idee?
    Progeny

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Le idee sono che se non lo sai tu, come funzionano le tue tabelle...

    In linea di principio comunque, se la join è doppia significa che ogni riga della prima tabella andrà in join con righe diverse della seconda, quindi il contenuto dello stesso campo può tranquillamente cambiare. Però ripeto, cosa contengono le tabelle lo puoi sapere solo tu

  3. #3
    $mysql->query("SELECT forum_topics.id AS `forum_topic_id`,
    forum_topics.forum_id,
    forum_topics.forum_cat_id,
    forum_topics.topic,
    forum_topics.author,
    forum_topics.date,
    forum_topics.last_post_uid,
    forum_topics.last_post_date,
    users.username
    FROM `forum_topics`
    LEFT JOIN `users` as u1 ON u1.id = forum_topics.author
    LEFT JOIN `users` as u2 ON u2.id = forum_topics.last_post_uid
    WHERE `forum_id`='$id_forum'");

    una cosa come questa dovrebbe andare, anche se il secondo ON non sono sicuro di aver beccato il campo giusto

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    274
    LEFT JOIN `users` ON users.id = forum_topics.author
    LEFT JOIN `users` ON users.id = forum_topics.last_post_uid

    author e last_post_uid sono dei valori INT, sono appunto degli ID per l'utente; la tabella users contiene i dati degli utenti.

    uso la LEFT JOIN perchè a partire dall'ID (author) devo ottenere l'username dell'utente (users.username), questa left join, devo farla anche sul campo last_post_uid, in modo da risalire (a partire dall'ID dell'utente) all'username dello stesso.

    Il problema è, dato che nella query ho:
    SELECT campo1, campo2, etc, users.username

    come può users.username ritornarmi nella stessa query, l'username dell'utente che ha creato il topic e quello dell'utente che ha inviato l'ultimo post per quel topic?! ho il dubbio che con la left join non posso ottenere quello che voglio, quindi ribadisco, quali alternative ci sono (evitando di fare più query etc...)?
    Progeny

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    274
    Originariamente inviato da luca200
    Le idee sono che se non lo sai tu, come funzionano le tue tabelle...

    In linea di principio comunque, se la join è doppia significa che ogni riga della prima tabella andrà in join con righe diverse della seconda, quindi il contenuto dello stesso campo può tranquillamente cambiare. Però ripeto, cosa contengono le tabelle lo puoi sapere solo tu
    ho dovuto togliere dal select-statement il campo users.username altrimenti dava errore, ho fatto come hai suggerito:

    LEFT JOIN `users` AS `user_author` ON user_author.id = forum_topics.author
    LEFT JOIN `users` AS `user_last_post` ON user_last_post.id = forum_topics.last_post_uid

    ma `user_author` ed `user_last_post` sono vuoti
    Progeny

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    274
    eh appunto nel select-statement, ho dimenticato di prendere i campi "u1.username" e "u2.username" :-D

    funziona, grazie!
    Progeny

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.