web-dev-qa-db-fra.com

Sélectionnez les données de plusieurs tables et les résultats en sortie sous forme de fichier json

J'ai écrit cette requête pour obtenir des données de 3 tables différentes qui ont une colonne similaire.

Le problème, c'est que cela génère une erreur:

500 erreur de serveur interne

J'ai besoin que la sortie soit sous la forme de json, et les valeurs des colonnes de tâches devraient être des tableaux enfants (dans le json).

S'il vous plaît laissez-moi savoir où l'erreur est dans cette requête.

 $query2 = "SELECT
                jos_mobile_contacts.contact_record_id,
                jos_mobile_contacts.firstName,
                jos_mobile_contacts.lastName,
                jos_mobile_contacts.mobiePhoneNumber,
                jos_mobile_contacts.officePhoneNumber,
                jos_mobile_contacts.contactType,
                jos_mobile_contacts.email,
                jos_mobile_contacts.address,
                jos_mobile_contacts.address2,
                jos_mobile_contacts.city,
                jos_mobile_contacts.state,
                jos_mobile_contacts.Zip,
                jos_mobile_contacts.notes,
                jos_mobile_contacts.customfield1,
                jos_mobile_contacts.customfield2,
                jos_mobile_contacts.customfield3,
                jos_mobile_contacts.companyName,
                jos_mobile_contacts.title,
                jos_tasks.title,
                josi_tasks.priority,
                jos_tasks.description
            FROM jos_mobile_contacts
            INNER JOIN jos_tasks
            WHERE jos_mobile_contacts.registered_mobile_id ='453'
              and jos_tasks.registered_mobile_id ='453'";

$db->setQuery($query2);
$db->query();
$numrows= $db->getNumRows();
$rowsContacts = $db->loadAssocList();

if ($numrows <= 0 ) {
    $displayAction = "display:none";
} else {
    foreach ($rowsContacts as $contactInfo) {
        $row_array['contactsId']= $contactInfo['contact_record_id'];
        $row_array['firstName']= $contactInfo['firstName'];
        $row_array['lastName']= $contactInfo['lastName'];
        $row_array['mobiePhoneNumber']= $contactInfo['mobiePhoneNumber'];
        $row_array['officePhoneNumber']= $contactInfo['officePhoneNumber'];
        $row_array['priority']= $contactInfo['priority'];
        $row_array['title']= $contactInfo['title'];
    }
    echo $row_array;
}
2
Manoj Yadav

Une erreur 500 n'est pas assez précise pour savoir exactement ce qui a provoqué le crash, mais je vois des problèmes dans votre code.

  1. Premièrement, votre requête ne fait que référencer 2 tables et non 3 comme vous l'avez indiqué dans votre question, de sorte qu'elle peut être complètement fausse.
  2. Généralement, le préfixe de la table (jos_) serait remplacé par #__. De cette façon, vous pouvez installer votre code sur plusieurs sites avec différents préfixes de base de données.
  3. $ db-> query () est obsolète et n'est pas nécessaire. $ db-> loadAssocList exécutera quand même la requête.
  4. Vous utilisez echo pour générer un tableau. Utilisez json_encode pour encoder votre tableau en une chaîne json.

La cause exacte de votre erreur 500 pourrait être l’une des situations ci-dessus, je soupçonne le numéro 4.

Je ne peux pas tester le code ci-dessous sans accéder à votre base de données, mais cela devrait vous mettre sur la bonne voie.

$mobileid = 453;
$db = JFactory::getDbo();
$query = $db->getQuery(true)
    ->select('contacts.contact_record_id, contacts.firstName, 
    contacts.lastName, contacts.mobiePhoneNumber, 
    contacts.officePhoneNumber, contacts.contactType, 
    contacts.email, contacts.address, contacts.address2, 
    contacts.city, contacts.state, contacts.Zip, 
    contacts.notes, contacts.customfield1, contacts.customfield2,  
    contacts.customfield3, contacts.companyName, contacts.title, 
    tasks.title, josi_tasks.priority, tasks.description')
    ->from('#__tasks AS tasks')
    ->innerJoin('#__mobile_contacts AS contacts ON tasks.registered_mobile_id = contacts.registered_mobile_id')
    ->where('tasks.registered_mobile_id = '.$mobileid);

$db->setQuery($query2);
$rowsContacts = $db->loadAssocList();

if (count($rowsContacts)){
    $displayAction = "display:none";
} else {
    foreach ($rowsContacts as $contactInfo) {
        $row_array['contactsId']        = $contactInfo['contact_record_id'];
        $row_array['firstName']         = $contactInfo['firstName'];
        $row_array['lastName']          = $contactInfo['lastName'];
        $row_array['mobiePhoneNumber']  = $contactInfo['mobiePhoneNumber'];
        $row_array['officePhoneNumber'] = $contactInfo['officePhoneNumber'];
        $row_array['priority']          = $contactInfo['priority'];
        $row_array['title']             = $contactInfo['title'];
    }
    $output = json_encode($row_array);
    echo $output;
}

J'espère que ça aide. Cordialement John

2
John Pitchers