Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343

    risolvere questa join ??

    Ciao a tutti,
    sto provando a fare questa join ma mi da' il seguente errore :


    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'messages INNER JOIN users U ON (U.uid='54' ) WHERE M.uid_fk=U.uid OR' at line 3

    La join è questa

    Codice PHP:
    class Wall_Updates 


         
         
    // Updates        
          
    public function Updates($uid)  
        { 
         
         
             
    $query mysql_query"SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM 
            messages  INNER JOIN messages M  ON (M.uid_fk='
    $uid' ) 
            messages INNER JOIN users U ON (U.uid='
    $uid' ) 
             
    WHERE    
    M.uid_fk=U.uid OR M.uid_fk='
    $uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());      
             while(
    $row=mysql_fetch_array($query)) 
            
    $data[]=$row
            return 
    $data
             
             
            
             
             
             
        } 
    Le tabelle sono

    messages
    relationship
    users

    per quale motivo deve essere sempre così incasinata una join

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    da quello che vedo è proprio l'intersezione delle tabelle che è sbagliata... ma non sapendo come sono ditribuiti i campi non saprei come consigliarti

    e comunque '$uid' sono numeri? se si elimina pure gli apici

    se vuoi aiuto posta le strutture delle tabelle e quello che vuoi ottenere dalla loro intersezione... anche in privato se vuoi
    NON ABBANDONATE CANI O GATTI!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    allora cerco di essere più chiaro possibile ....

    ho tre tabelle messages, comments, users ma quelle che mi servono sono users e messages .

    Lo script originale era questo:

    Codice PHP:
    class Wall_Updates 


         
         
    // Updates        
          
    public function Updates($uid)  
        { 
            
    $query mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created, U.username FROM messages M, users U  WHERE M.uid_fk=U.uid and M.uid_fk='$uid' order by M.msg_id desc ") or die(mysql_error()); 
             while(
    $row=mysql_fetch_array($query)) 
            
    $data[]=$row
            return 
    $data
             
        } 

    Come puoi vedere c'è U.username e users U.

    Modificandolo come serve a me così :

    Codice PHP:
    class Wall_Updates 


         
         
    // Updates        
          
    public function Updates($uid)  
        { 
         
         
             
    $query mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE   M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc  ") or die(mysql_error());      
             while(
    $row=mysql_fetch_array($query)) 
            
    $data[]=$row
            return 
    $data
             
        } 
    NOn posso aggiungere la tabella users perché se no al posto di vedere solo i post degli amici come funziona correttamente in questa query, mi fa' vedere il post ripetuto per tutti gli utenti registrati.

    La mia necessità è quella di aggiungere a quest'ultima query la tabella users per recuperare dei dati che mi servono da stampare e ho pensato di fare una join, ma magari potrebbe bastare una qualsiasi query ecc.

    E ho provato così nel pomeriggio:

    Codice PHP:
    // Updates         
          
    public function Updates($uid)   
        {  
          
          
             
    $query mysql_query"SELECT M.msg_id, M.uid_fk, M.message, M.created, username FROM  
           messages  
            INNER JOIN messages M  ON (M.uid_fk='
    $uid' ) 
            INNER JOIN users U ON (M.uid_fk=U.uid )  
           
              
    WHERE     
    M.uid_fk=U.uid AND  M.uid_fk='
    $uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S')   order by M.msg_id desc") or die(mysql_error());       
              
             while(
    $row=mysql_fetch_array($query))  
            
    $data[]=$row;  
            return 
    $data;  
              
      } 

    Pero' nn funziona bene perché mi rida' tutti i post

    ti posto i campi delle tabelle

    Codice PHP:
    CREATE TABLE IF NOT EXISTS `users` ( 
      `
    uidbigint(20NOT NULL AUTO_INCREMENT
      `
    md5_idvarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    full_nametinytext COLLATE latin1_general_ci NOT NULL
      `
    usernamevarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    user_emailvarchar(220COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    emailvarchar(100COLLATE latin1_general_ci NOT NULL
      `
    user_leveltinyint(4NOT NULL DEFAULT '1'
      `
    pwdvarchar(220COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    addresstext COLLATE latin1_general_ci NOT NULL
      `
    countryvarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    telvarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    faxvarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    websitetext COLLATE latin1_general_ci NOT NULL
      `
    datedate NOT NULL DEFAULT '0000-00-00'
      `
    users_ipvarchar(200COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    approvedint(1NOT NULL DEFAULT '0'
      `
    activation_codeint(10NOT NULL DEFAULT '0'
      `
    bannedint(1NOT NULL DEFAULT '0'
      `
    ckeyvarchar(220COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    ctimevarchar(220COLLATE latin1_general_ci NOT NULL DEFAULT ''
      `
    nome_file_verovarchar(255COLLATE latin1_general_ci NOT NULL
      `
    tipo_filevarchar(255COLLATE latin1_general_ci NOT NULL
      `
    dati_filelongblob NOT NULL
      
    PRIMARY KEY (`uid`), 
      
    UNIQUE KEY `user_email` (`user_email`), 
      
    FULLTEXT KEY `idx_search` (`full_name`,`address`,`user_email`,`username`) 
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=66 
    i campi della tabella messages
    Codice PHP:

    Codice PHP:
    CREATE TABLE IF NOT EXISTS `messages` ( 
      `
    msg_idint(11NOT NULL AUTO_INCREMENT
      `
    messagevarchar(200) DEFAULT NULL
      `
    uid_fkint(11) DEFAULT NULL
      `
    ipvarchar(30) DEFAULT NULL
      `
    createdint(11) DEFAULT '1269249260'
      
    PRIMARY KEY (`msg_id`), 
      
    KEY `uid_fk` (`uid_fk`) 
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=274 

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    mi erao dimenticato la tabella relationship:

    Codice PHP:
    CREATE TABLE IF NOT EXISTS `relationship` (
      `
    idint(10NOT NULL auto_increment,
      `
    user_1varchar(10NOT NULL,
      `
    user_2varchar(10NOT NULL,
      `
    amicoenum('S','N'NOT NULL default 'N',
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    ???

    Nessuno sa come aiutarmi ??

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    cosa sarebbe il campo uid_fk nella tabella messages? l'id utente?
    NON ABBANDONATE CANI O GATTI!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Ciao.

    Uid_fk. Unisce la tabella messages alla tabella comments

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    diciamo che il db non è tanto normalizzato e non ho ben capito cosa vuoi ottenere, comunque questa query ti da quello che vuoi?

    codice:
    select a.*, b.username from messages as a inner join users as b 
    on a.uid_fk = b.uid
    group by b.uid

    fammi sapere
    NON ABBANDONATE CANI O GATTI!!!

  9. #9
    Potresti spiegare a parole ciò che desideri estrarre dal DB?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Certamente...

    Allora lo scopo è ricreare per un cliente di mio cugino ( a cui sto dando una mano )
    il meccanismo di facebook, dove gli avvocati che sono registrati al sito si chiedono l'amicizia e solo quelli che sono amici vedono i post altrui ...

    Detto questo la query originale aveva U.username e users.U nella query originale, aggiungendo alla query la relazione della tabella relatonship e lasciando U.username e users.U
    al posto di farmi vedere in maniera corretta come nella query qui sotto

    Codice PHP:
    class Wall_Updates // Updates public function Updates($uid) { $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE M.uid_fk='$uid' OR M.uid_fk IN (SELECT user_1 FROM relationship AS r WHERE r.user_2 = '$uid' AND r.amico = 'S') OR M.uid_fk IN (SELECT user_2 FROM relationship AS r WHERE r.user_1 = '$uid' AND r.amico = 'S') order by M.msg_id desc ") or die(mysql_error()); while($row=mysql_fetch_array($query)) $data[]=$row; return $data; } 
    I post degli utenti loggati ricreandomi identicamente la procedura di fb mi ripete il post per tutti gli users che sono nella tabella users.

    A me è indispensabile richiamare la tabella users per printare l'username di fianco alla foto
    e la foto del cliente, altrimenti con la query che ti ho appena postato mi viene fuori la foto di default ma non il nome di chi la messo creando confusione.



    select a.*, b.username from messages as a inner join users as b on a.uid_fk = b.uid group by b.uid
    In questa query non vedo la relazione e quindi non capisco se posso aggiungerla a questa tua query e risolvo il mio problema, oppure se tu avevi già previsto la relazione degli utenti che richiamo dalla tabella relationship ..

    spero di essere stato chiaro

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.