2014-12-24 2 views
1

Я попытался объединить две таблицы из базы данных mysql, две таблицы: status and status_reply оба имеют одинаковые номера столбцов и имя, то есть id, account_name, author, postdate, data. Пожалуйста, помогите будет оценено.MySQLi выбрать из двух таблиц с ограничением

  $limit = "LIMIT 0, 10"; 
     $query = mysqli_query($db_conx, "(SELECT * `status` as type from status WHERE data LIKE '%".$tag."%' ORDER BY postdate DESC $limit) 
            UNION (SELECT * `status_reply` as type from status_reply WHERE data LIKE '%".$tag."%' ORDER BY postdate DESC $limit)"); 

      //$query = mysqli_query($db_conx, "SELECT * FROM status WHERE data LIKE '%$tag%' ORDER BY postdate DESC $limit"); 
      $statusnumrows = mysqli_num_rows($query); 
      while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
      $statusid = $row["id"]; 
      $account_name = $row["account_name"]; 
      $author = $row["author"]; 
      $postdate = $row["postdate"]; 
      $data = $row["data"]; 
      $data = nl2br($data); 
      $data = str_replace("&","&",$data); 
      $data = stripslashes($data); 
      $statuslist .= '<div id="status_'.$statusid.'" class="status_boxes"><div><b>Ivotised by <a href="home.php?u='.$author.'">'.$author.'</a> '.$postdate.':</b> 
<article>'.$data.'</article> 
</div></div>'; 
      } 
+0

и какая у вас проблема? – KennyPowers

+0

Не используйте одинарные кавычки для разделителей, используйте backticks \ 'status \' Также вам нужна запятая после * – Mihai

+0

Вам нужно присоединиться к ним, используя столбец? – user4035

ответ

0

я понял, что я должен удалить тип как в состоянии и status_reply как ссылки на столы и определили каждый из столбцов по их именам , Мне тоже интересно об этом!

$query = mysqli_query($db_conx, " 
(SELECT id, account_name, author, postdate, data from status WHERE data LIKE '%".$tag."%' 
    ORDER BY postdate DESC $limit) 
UNION 
(SELECT id, account_name, author, postdate, data from status_reply WHERE data LIKE '%".$tag."%' 
    ORDER BY postdate DESC $limit)"); 
1
  1. Используйте обратные кавычки `для имен полей вместо прямых кавычек"
  2. Не забудьте указать $tag для защиты от инъекции SQL: mysqli_real_escape_string
  3. Помните, что вы хотите найти буквально для символьных символов LIKE «%», «_», а также обратная косая черта. Вы должны избавиться от них тоже с помощью: $tag = addcslashes($tag, '\%_');

$limit = "LIMIT 0, 10"; 
$query = mysqli_query($db_conx, " 
(SELECT `status` as type from status WHERE data LIKE '%".$tag."%' 
    ORDER BY postdate DESC $limit) 
UNION 
(SELECT `status_reply` as type from status_reply WHERE data LIKE '%".$tag."%' 
    ORDER BY postdate DESC $limit)"); 
+0

У меня все еще такая же ошибка: ** Предупреждение: mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, boolean задан в C: \ wamp \ www \ tag.php on line 82 ** –

+0

Удовлетворенность санитарии кода, проблема заключается в том, чтобы решить проблему. Тем не менее, спасибо за совет. –

+0

@MandeKira Попробуйте запустить 'print mysqli_error ($ db_conx);' после запуска 'mysqli_query' – user4035

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