web-dev-qa-db-ja.com

複数のテーブルからデータを選択し、結果をjsonとして出力する

このクエリは、1つの類似した列を持つ3つの異なるテーブルからデータを取得するために作成しました。

問題は、エラーをスローすることです。

500内部サーバーエラー

出力をjsonの形式にする必要があり、タスク列の値は(json内の)子配列である必要があります。

このクエリのどこにエラーがあるか教えてください。

 $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

500エラーは、クラッシュの原因を正確に特定できるほど具体的ではありませんが、コードにいくつかの問題が見られます。

  1. まず、クエリは2つのテーブルのみを参照しているので、質問で述べた3ではなく、完全に間違っている可能性があります。
  2. 通常、テーブルプレフィックス(jos_)は#__に置き換えられます。このようにして、データベースのプレフィックスが異なる複数のサイトにコードをインストールできます。
  3. $ db-> query()は非推奨であり、必要ありません。 $ db-> loadAssocListはとにかくクエリを実行します。
  4. エコーを使用して配列を出力しています。 json_encodeを使用して、配列をjson文字列にエンコードします。

500エラーの正確な原因は上記のいずれかである可能性があります。

私はあなたのデータベースにアクセスせずに以下のコードをテストすることはできませんが、これはあなたを正しい軌道に乗せるでしょう。

$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;
}

これがお役に立てば幸いです。よろしくジョン

2
John Pitchers