Essayer de joindre deux tables SQL

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mars 26th, 2011, 4:24 pm

Im dans le processus d'écriture d'un forum pour un système de CMS qui Im développement. J'ai eu l'idée principale de la façon de le faire et je sais comment, j'ai juste ce petit problème de mise en œuvre du SQL pour travailler comme il faut (Eh bien, il fonctionne comme il faut je ne peux pas former en ce que j'en ai besoin) .

J'ai 2 tables à l'heure actuelle (Il serait plus tard)...de toute façon...le premier tableau contient les catégories et la seconde contient les forums qui sont affectés à la bonne catégorie...

SQL Code: [ 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 ;

Je peux sélectionner les informations de chaque table séparément, mais Im essayant de rejoindre le SQLS je récupérer des informations de la catégorie et tous les forums qui sont assignés à cette catégorie.

Je vais essayer de l'expliquer en termes de PHP depuis je ne peux pas expliquer en anglais :(:lol:

Récupérer des informations de chaque catégorie
Chaque catégorie A forums, joindre à ceux des forums avec les résultats.

Alors, quand je récupérer des informations de la catégorie mon tableau pourrait ressembler...
Code: [ 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. )

Ce que je veux qu'il ressemble à la fin est...
Code: [ 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. )

J'espère que cela avait un sens...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mars 26th, 2011, 4:24 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Mars 26th, 2011, 4:50 pm

SQL Code: [ 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 l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mars 26th, 2011, 5:37 pm

Son lancer l'erreur suivante...
Code: [ 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 l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Mars 26th, 2011, 5:40 pm

Cela signifie qu'il ya une erreur dans la requête. Vous devez vérifier votre journal pour l'erreur de comprendre ce qui est erroné avec lui. N'avez-vous pas avoir un mysql_error () quelque part la fonction de votre classe de base de données?
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Avril 1st, 2011, 2:13 am

Ok, je suis celui fixé...appare notly j'ai oublié de mettre le mysql_error () dans le lieu où il définit en fait la ressource de résultat MySQL...mon mauvais. Il s'avère que j'ai tapé une fieldname :oops:

Merci!
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Avril 1st, 2011, 2:10 pm

Je viens de recevoir un autre problème avec SQL et cette fois, mysql_error () n'est pas de jeter des choses...en fait,...rien ne me donne aucune information quant au pourquoi sa ne fonctionne pas.

Eh bien...la seule erreur que je vois est celle que j'ai ma classe db écrire dans mon propre journal

Quote:
[Ven Avr, 01 19:22:15] Erreur de paramétrage de MySQL ressources. SQL utilisée: "INSERT INTO` cms_track »(« TrackID »,« nom d'utilisateur »,« 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, "null", C: / wamp / www / CMS / index.php ", 1301685735 », 127.0.0.1)"


Mais la raison pour laquelle, mysql_error () n'est pas jeter n'importe quoi et je ne sais pas. Il a 2000 + entrées-il si je sais qu'il a travaillé et puis j'ai pensé qu'il était possible qu'il n'y avait que trop d'entrées, donc je tronquée de la table, mais il me donne toujours la même erreur.

Une autre chose étrange, que, même si sa me donne l'erreur, la requête SQL est encore réalisée qui me porte à croire l'erreur vient de ma fonction SQL plutôt que le SQL lui-même.

Ci-dessous est la fonction que j'utilise:
PHP Code: [ 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 l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 1st, 2011, 2:52 pm

Vous ne voulez probablement pas à utiliser die () à sa sortie de votre script. Il suffit de retourner false si vous pouvez gérer l'erreur plus tard.
Êtes-vous mise en silence de faux?
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Avril 1st, 2011, 3:39 pm

Pour une raison quelconque, peu importe si je mets le silence à vrai ou faux, je viens de voir un écran vide plutôt que mon site comme si quelque chose est mort mon script, mais si je retire le die () de là, cela ne fonctionne toujours la même chose , donc ce n'est pas parce que de mourir.

Aussi, j'ai mis dans le die () y (en fait trouvé son ensemble de la classe) pour le débogage des raisons et ne serait de voir si le silence est définie sur false...et que serait la valeur false uniquement en phase de développement.

Et oui, je mettrai le silence à false pour m'assurer que je reçois les erreurs...

Je ne sais pas ce qui pourrait être la cause du problème ici...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 1st, 2011, 3:45 pm

jeter le mysql_error () dans votre journal des erreurs et voir si elle est imprimé là-bas.
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Avril 1st, 2011, 3:48 pm

Il n'est pas...J'ai une question.

Lorsque vous insérer quelque chose, ne mysql_query () retourne une ressource ou tout simplement un booléen? Parce que, selon ce qu'il se passe, le mysql_query () est réussie, mais échoue à l' is_resource () fonction.

Si oui, thats une partie du problème, mais alors, pourquoi est-il suffit de tuer le script avec l'ensemble de silence pour vrai?

var_dump ($ ressource) crache bool (true)
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Avril 1st, 2011, 3:52 pm

J'ai résolu le problème en changeant
PHP Code: [ Select ]
if(is_resource($resource))
à
PHP Code: [ Select ]
if(is_resource($resource) || $resource == true)


Im me demande pourquoi l'ensemble du script a été tués lorsque la fonction retourne false db a été...La fonction qui lance en fait le SQL ne tue pas le script en cas de défaillance...
PHP Code: [ 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

Afficher de l'information

  • Total des messages de ce sujet: 11 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 177 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC