chi mi aiuta a risolvere questa join ??

searedone

Utente Attivo
11 Giu 2010
508
0
0
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

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 :(
 
Ok ok ..

scusate errore mio ...

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:

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ì :

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:

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

PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `uid` bigint(20) NOT NULL AUTO_INCREMENT,
  `md5_id` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `full_name` tinytext COLLATE latin1_general_ci NOT NULL,
  `username` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `user_email` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `email` varchar(100) COLLATE latin1_general_ci NOT NULL,
  `user_level` tinyint(4) NOT NULL DEFAULT '1',
  `pwd` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `address` text COLLATE latin1_general_ci NOT NULL,
  `country` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `tel` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `fax` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `website` text COLLATE latin1_general_ci NOT NULL,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `users_ip` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `approved` int(1) NOT NULL DEFAULT '0',
  `activation_code` int(10) NOT NULL DEFAULT '0',
  `banned` int(1) NOT NULL DEFAULT '0',
  `ckey` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `ctime` varchar(220) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `nome_file_vero` varchar(255) COLLATE latin1_general_ci NOT NULL,
  `tipo_file` varchar(255) COLLATE latin1_general_ci NOT NULL,
  `dati_file` longblob 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
PHP:
CREATE TABLE IF NOT EXISTS `messages` (
  `msg_id` int(11) NOT NULL AUTO_INCREMENT,
  `message` varchar(200) DEFAULT NULL,
  `uid_fk` int(11) DEFAULT NULL,
  `ip` varchar(30) DEFAULT NULL,
  `created` int(11) DEFAULT '1269249260',
  PRIMARY KEY (`msg_id`),
  KEY `uid_fk` (`uid_fk`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=274 ;

Tabella relationship


CREATE TABLE IF NOT EXISTS `relationship` (
`id` int(10) NOT NULL auto_increment,
`user_1` varchar(10) NOT NULL,
`user_2` varchar(10) NOT NULL,
`amico` enum('S','N') NOT NULL default 'N',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
 
Ultima modifica:
Sera a tutti...

ho provato anche così ma non mi tiene l'users dopo che rinfresco la pagina .....

PHP:
 $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created FROM messages M WHERE M.uid_fk='$uid' OR  (SELECT u.username FROM users AS u WHERE M.uid_fk = u.uid AND u.username = '$username' )  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());
 

Discussioni simili