Tratando de unir dos tablas de SQL

  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Marzo 26th, 2011, 4:24 pm

Estoy en el proceso de escritura de un foro para un sistema de CMS que estoy desarrollando. Tengo la idea principal de cómo hacerlo y sé, sólo tengo este pequeño problema de la aplicación del SQL para trabajar como tiene que (Bueno, funciona como tiene que no puedo formar en lo que se necesita) .

Tengo dos tablas en el momento (No sería más adelante)...de todos modos...la primera tabla contiene las categorías y tiene el segundo de los foros que se asignan a la categoría correcta...

SQL Código: [ Select ]
CREATE TABLE IF NOT EXISTS `cms_forum_cat` (
  `catID` int(11) NOT NULL AUTO_INCREMENT,
  `catName` varchar(50) NOT NULL,
  `catDescription` varchar(100) NOT NULL,
  `forums` int(5) NOT NULL,
  PRIMARY KEY (`catID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
 
CREATE TABLE IF NOT EXISTS `cms_forum_forums` (
  `forumID` int(11) NOT NULL AUTO_INCREMENT,
  `catID` int(11) NOT NULL,
  `forumName` varchar(50) NOT NULL,
  `forumDescription` varchar(100) NOT NULL,
  `topics` int(11) NOT NULL,
  `posts` int(11) NOT NULL,
  `lastPoster` varchar(100) NOT NULL,
  PRIMARY KEY (`forumID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  1. CREATE TABLE IF NOT EXISTS `cms_forum_cat` (
  2.   `catID` int(11) NOT NULL AUTO_INCREMENT,
  3.   `catName` varchar(50) NOT NULL,
  4.   `catDescription` varchar(100) NOT NULL,
  5.   `forums` int(5) NOT NULL,
  6.   PRIMARY KEY (`catID`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  8.  
  9. CREATE TABLE IF NOT EXISTS `cms_forum_forums` (
  10.   `forumID` int(11) NOT NULL AUTO_INCREMENT,
  11.   `catID` int(11) NOT NULL,
  12.   `forumName` varchar(50) NOT NULL,
  13.   `forumDescription` varchar(100) NOT NULL,
  14.   `topics` int(11) NOT NULL,
  15.   `posts` int(11) NOT NULL,
  16.   `lastPoster` varchar(100) NOT NULL,
  17.   PRIMARY KEY (`forumID`)
  18. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Puedo seleccionar la información de cada tabla por separado, pero estoy tratando de unirse a la LSQ por lo que recuperar información de la categoría y todos los foros que están asignados a esa categoría.

Malos tratar de explicar en términos de PHP ya que no puedo explicar en Inglés :(:lol:

Recuperar información de cada categoría
Cada categoría que cuenta con foros, unirse a los foros con los resultados.

Así que cuando me recupere la información de la categoría de mi arsenal parecería...
Código: [ Select ]
Array
(
  [0] => Array
    (
      [catID] => 2
      [catName] => News and Announcements
      [catDescription] => News and Announcements
      [forums] => 1
    )

  [1] => Array
    (
      [catID] => 3
      [catName] => Support Center
      [catDescription] => Support Center
      [forums] => 0
    )

  [2] => Array
    (
      [catID] => 4
      [catName] => On-Topic Discussion
      [catDescription] => On-Topic Discussion
      [forums] => 0
    )

)
  1. Array
  2. (
  3.   [0] => Array
  4.     (
  5.       [catID] => 2
  6.       [catName] => News and Announcements
  7.       [catDescription] => News and Announcements
  8.       [forums] => 1
  9.     )
  10.   [1] => Array
  11.     (
  12.       [catID] => 3
  13.       [catName] => Support Center
  14.       [catDescription] => Support Center
  15.       [forums] => 0
  16.     )
  17.   [2] => Array
  18.     (
  19.       [catID] => 4
  20.       [catName] => On-Topic Discussion
  21.       [catDescription] => On-Topic Discussion
  22.       [forums] => 0
  23.     )
  24. )

Lo que quiero que se vea como al final se...
Código: [ Select ]
Array
(
  [0] => Array
    (
      [catID] => 2
      [catName] => News and Announcements
      [catDescription] => News and Announcements
      [forums] => 1
      [forumID] => 1
      [forumName] => Policies and Procedures
      [forumDescription] => All policies relating to hosting provided, and abuse/support procedures are housed within
      [topics] => 0
      [posts] => 0
      [lastPoster] =>
    )

  [1] => Array
    (
      [catID] => 3
      [catName] => Support Center
      [catDescription] => Support Center
      [forums] => 0
    )

  [2] => Array
    (
      [catID] => 4
      [catName] => On-Topic Discussion
      [catDescription] => On-Topic Discussion
      [forums] => 0
    )
)
  1. Array
  2. (
  3.   [0] => Array
  4.     (
  5.       [catID] => 2
  6.       [catName] => News and Announcements
  7.       [catDescription] => News and Announcements
  8.       [forums] => 1
  9.       [forumID] => 1
  10.       [forumName] => Policies and Procedures
  11.       [forumDescription] => All policies relating to hosting provided, and abuse/support procedures are housed within
  12.       [topics] => 0
  13.       [posts] => 0
  14.       [lastPoster] =>
  15.     )
  16.   [1] => Array
  17.     (
  18.       [catID] => 3
  19.       [catName] => Support Center
  20.       [catDescription] => Support Center
  21.       [forums] => 0
  22.     )
  23.   [2] => Array
  24.     (
  25.       [catID] => 4
  26.       [catName] => On-Topic Discussion
  27.       [catDescription] => On-Topic Discussion
  28.       [forums] => 0
  29.     )
  30. )

Espero que tenía sentido...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Marzo 26th, 2011, 4:24 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Marzo 26th, 2011, 4:50 pm

SQL Código: [ Select ]
SELECT cms_forum_cat.catID,catName,catDescription,forums,forumID,forumNAME,forumDescription,topic,posts,lastPoster
FROM cms_forum_forums
LEFT JOIN cms_forum_cat ON cms_forum_forums.catID = cms_forum_cat.catID
  1. SELECT cms_forum_cat.catID,catName,catDescription,forums,forumID,forumNAME,forumDescription,topic,posts,lastPoster
  2. FROM cms_forum_forums
  3. LEFT JOIN cms_forum_cat ON cms_forum_forums.catID = cms_forum_cat.catID
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Marzo 26th, 2011, 5:37 pm

Su lanzar el siguiente error...
Código: [ Select ]
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\CMS\includes\db.php on line 461

Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\CMS\includes\db.php on line 677
  1. Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\CMS\includes\db.php on line 461
  2. Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\CMS\includes\db.php on line 677
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Marzo 26th, 2011, 5:40 pm

Eso significa que hay un error en la consulta. Es necesario comprobar el registro del error de averiguar cuál es incorrecto con él. ¿No tienes una mysql_error () en alguna parte en función de su clase de base de datos?
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Abril 1st, 2011, 2:13 am

Ok, tengo que fija...appare notly me olvidé de poner el mysql_error () en el lugar donde realmente establece el número de recursos mysql...mi mal. Resulta que he escrito mal un nombre de campo :oops:

¡Gracias!
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Abril 1st, 2011, 2:10 pm

Acabo de recibir otro problema con SQL y esta vez, mysql_error () es no tirar nada...de hecho,...no es que me da toda la información de por qué no su trabajo.

Bueno...el único error que veo es la que tengo mi clase db escribir en mi propio registro

Quote:
[Vie Abr 01 de 07:22:15 PM] Error al establecer MySQL recursos. SQL utilizada: "INSERT INTO` cms_track `(` TrackID `,` ID de usuario "," user-agent `,` pageFrom `,` pageTo `,` timeVisited `,` userIP `) VALUES (" 0 "," 0 ", Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv: 1.9.2.16) Gecko/20110319 Firefox/3.6.16, "nulo", C: / wamp / www / CMS / index.php ", 1301685735 ", 127.0.0.1)"


Pero en cuanto a por qué, mysql_error () no es tirar cualquier cosa y yo no lo sé. Había 2000 + entradas en ella así que sé que trabajaba y entonces pensé que era posible que sólo había demasiadas entradas, por lo que trunca la tabla, pero todavía me da el mismo error.

Otra cosa extraña, que a pesar de su me da el error, el SQL se sigue realizando lo que me lleva a creer que el error viene de mi función de SQL en lugar del propio SQL.

A continuación se muestra la función que utilizo:
PHP Código: [ Select ]
<?php
public function resource($sql = null, $return = false)
{
    // Checking if we are connected to MySQL
    if(!is_resource($this->mysql_link))
    {
        $this->connect();
    }
   
    // Checking if the SQL is empty
    if(is_null($sql))
    {
        $sql = $this->get_last_sql();
    }
   
    // Getting the resource into a variable
    $resource = mysql_query($sql);
   
    // Setting the last result variable
    $this->last_result = $resource;
   
    // Checking if the resource was created properly
    if(is_resource($resource))
    {
        // Checking if we are returning the result
        if($return)
        {
            return $resource;
        }
       
        // Otherwise we are returning true
        return true;
    }
    else
    {
        // Logging the error if need be
        if($this->log_errors === true)
        {
            $this->log_error('Error setting MySQL Resource. SQL used: "' . $sql . '"');
        }
       
        // Checking if we need to kill the script
        if($this->silent == false)
        {
            die(mysql_error());
        }
       
        // It was a failure... return false
        return false;
    }
}
?>
  1. <?php
  2. public function resource($sql = null, $return = false)
  3. {
  4.     // Checking if we are connected to MySQL
  5.     if(!is_resource($this->mysql_link))
  6.     {
  7.         $this->connect();
  8.     }
  9.    
  10.     // Checking if the SQL is empty
  11.     if(is_null($sql))
  12.     {
  13.         $sql = $this->get_last_sql();
  14.     }
  15.    
  16.     // Getting the resource into a variable
  17.     $resource = mysql_query($sql);
  18.    
  19.     // Setting the last result variable
  20.     $this->last_result = $resource;
  21.    
  22.     // Checking if the resource was created properly
  23.     if(is_resource($resource))
  24.     {
  25.         // Checking if we are returning the result
  26.         if($return)
  27.         {
  28.             return $resource;
  29.         }
  30.        
  31.         // Otherwise we are returning true
  32.         return true;
  33.     }
  34.     else
  35.     {
  36.         // Logging the error if need be
  37.         if($this->log_errors === true)
  38.         {
  39.             $this->log_error('Error setting MySQL Resource. SQL used: "' . $sql . '"');
  40.         }
  41.        
  42.         // Checking if we need to kill the script
  43.         if($this->silent == false)
  44.         {
  45.             die(mysql_error());
  46.         }
  47.        
  48.         // It was a failure... return false
  49.         return false;
  50.     }
  51. }
  52. ?>
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Abril 1st, 2011, 2:52 pm

Es probable que no desee utilizar morir () a medida que sale la secuencia de comandos. Sólo return false para que pueda controlar el error más adelante.
Si eres ajuste de silencio en false?
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Abril 1st, 2011, 3:39 pm

Por alguna razón, no importa si pongo en silencio a verdadero o falso, acabo de ver una pantalla en blanco en lugar de mi sitio como si algo está matando a mi guión, pero si me quito la matriz () salir de allí, todavía hace lo mismo , por lo que su no a causa de morir.

Además, puse en el dado () en que (su realidad se encuentran en toda la clase) para efectos de depuración y solamente quedará en silencio viendo si se establece en false...y que se establece en false sólo en fase de desarrollo.

Y sí, he puesto el silencio en false para asegurarse de que recibe los errores...

No sé lo que podría estar causando el problema aquí...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Abril 1st, 2011, 3:45 pm

lanzar el mysql_error () con su registro de errores y ver si se imprime allí.
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Abril 1st, 2011, 3:48 pm

No...Tengo una pregunta.

Al insertar algo, se mysql_query () devuelven un recurso o simplemente un booleano? Porque de acuerdo a qué está sucediendo, el mysql_query () tiene éxito, pero no la is_resource () función.

Si eso es así, eso es parte del problema, pero entonces, ¿por qué simplemente matar a la secuencia de comandos con el sistema silencioso de verdad?

var_dump ($ recurso) escupe bool (true)
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8212
  • Loc: USA
  • Status: Offline

Nota Abril 1st, 2011, 3:52 pm

He resuelto el problema cambiando
PHP Código: [ Select ]
if(is_resource($resource))
a
PHP Código: [ Select ]
if(is_resource($resource) || $resource == true)


Im pregunto por qué todo el guión estaba muerto cuando la función db regresaba falsa...La función que de hecho inicia el SQL no matar a la secuencia de comandos en caso de fallo...
PHP Código: [ Select ]
<?php
private function track_user($user)
{
    global $db;
   
    // The SQL Data Table for user track
    $data_table = array("trackID"       => '0',
                        "userID"        => $this->user_id,
                        "user-agent"    => $_SERVER['HTTP_USER_AGENT'],
                        "pageFrom"      => (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : 'null',
                        "pageTo"        => (!empty($_SERVER['QUERY_STRING'])) ? $_SERVER['SCRIPT_FILENAME'] . '?' . $_SERVER['QUERY_STRING'] : $_SERVER['SCRIPT_FILENAME'],
                        "timeVisited"   => date('Y-m-d h:i:s'),
                        "userIP"        => $this->get_ip());
                       
    // Building the insert SQL to insert the user into the SQL table
    $sql = $db->build_insert(USER_TRACK, $data_table);
   
    // Inserting the user into the table
    $db->resource($sql);
}
?>
  1. <?php
  2. private function track_user($user)
  3. {
  4.     global $db;
  5.    
  6.     // The SQL Data Table for user track
  7.     $data_table = array("trackID"       => '0',
  8.                         "userID"        => $this->user_id,
  9.                         "user-agent"    => $_SERVER['HTTP_USER_AGENT'],
  10.                         "pageFrom"      => (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : 'null',
  11.                         "pageTo"        => (!empty($_SERVER['QUERY_STRING'])) ? $_SERVER['SCRIPT_FILENAME'] . '?' . $_SERVER['QUERY_STRING'] : $_SERVER['SCRIPT_FILENAME'],
  12.                         "timeVisited"   => date('Y-m-d h:i:s'),
  13.                         "userIP"        => $this->get_ip());
  14.                        
  15.     // Building the insert SQL to insert the user into the SQL table
  16.     $sql = $db->build_insert(USER_TRACK, $data_table);
  17.    
  18.     // Inserting the user into the table
  19.     $db->resource($sql);
  20. }
  21. ?>
"Bring forth therefore fruits meet for repentance:" Matthew 3:8

Publicar Información

  • Total de mensajes en este tema: 11 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 165 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC