2016-11-17 2 views
0

Таким образом, этот код работает только в том случае, если таблицы, которые я вызываю для соответствия запросу, однако я все же хочу отображать все значения главной таблицы, которая является новостью n. Что такое лучший способ приблизиться к этомуSELECT несколько таблиц MYSQL в PHP

Вот я только что закончил мой запрос

$query="SELECT * FROM news n,category c, comments a, appusers u, admins w WHERE n.cat_id=c.category_id AND w.userId=n.post_author AND a.post_id=n.id AND u.user_id=a.userID ORDER BY a.commentid DESC, n.id DESC";  
     $result = mysql_query($query); 

$json_response = array(); 
     while($row=mysql_fetch_array($result)) { 

      if (!isset($json_response[ $row['id'] ])) { 
       $json_response[ $row['id'] ] = [ 
       'id' => $row['id'], 
       'title' => $row['title'], 
       'catId' => $row['cat_id'], 
       'catName' => $row['category_name'], 
       'catImage' => $row['category_image'], 
       'postDate' => $row['post_date'], 
       'postImage' => $row['post_image'], 
       'post' => $row['post'], 
       'commentCount' => $row['comment_count'], 
       'videoUrl' => $row['video_url'], 
       'tags' => $row['tags'], 
       'author' => $row['tags'], 
       'comments' => [], 
       ]; 
      } 
      $json_response[ $row['id']]['comments'][] = [ 
      'id' => $row['commentid'], 
      'comment' => $row['comment'], 
      'name' => $row['user_name'], 
      'userId' => $row['userID'] 
      ]; 
     } 

$data = []; 
     foreach ($json_response as $element) { 
      $data[] = $element; 
     } 


     echo json_encode($data, JSON_PRETTY_PRINT); 

И тогда я пытаюсь отобразить результат JSON здесь

+0

В первую очередь: ** stop ** с использованием 'mysql_'-функций, они устарели и в PHP7.0, ** удалены **. вместо этого используйте 'mysqli_' или' PDO'. во-вторых: вы должны действительно унифицировать свое соглашение об именах таблиц. 'category_id',' userID', 'userId'? три разных схемы для ID-именования? это обязательно приведет к ошибкам. в-третьих: вы действительно ** хотите выбрать ** все ** данные с ** каждым ** заявлением, которое вы запускаете, без какой-либо фильтрации или сокращения? это немного замедлит вашу систему. –

+0

Спасибо @FranzGleichmann, я обязательно прислушаюсь. –

ответ

1

Пожалуйста, попробуйте ниже запрос, Это может работать для вас ,

select * from news n 
LEFT JOIN category c ON c.category_id = n.cat_id 
LEFT JOIN admins w ON w.userId=n.post_author 
LEFT JOIN comments a ON a.post_id=n.id 
LEFT JOIN appusers u ON u.user_id=a.userID 
ORDER BY 
a.commentid DESC, n.id DESC"; 
+0

Это абсолютно работает, спасибо !!! :) –

Смежные вопросы