B-Allen
@B-Allen
webmaster

Кас написать сложный запрос к mysql — лента вопросов(статей) по тегу?

Есть лента вопросов с тегами, ни как не могу составить запрос для вывода вопросов по определенному тегу.
Сайт старый - процедурный стиль.
лента всех вопросов

Для всех использую такую функцию, буду рад предложениям по лучше. LIMIT стоит для пагинации.
function helpContent($start_pos, $perpage){
    $query = "SELECT h.id_q, h.title, h.tags, h.datetime, h.view,
                COUNT(a.id_q) AS ans
              FROM help_q h
              LEFT JOIN answers a ON a.id_q = h.id_q AND a.parent_id = 0
              GROUP BY h.id_q
              ORDER BY h.id_q DESC LIMIT $start_pos,$perpage";
    $res = mysql_query($query) or die(mysql_query());
    $arrayContent = array();
    $i = 0;
    while($row = mysql_fetch_assoc($res)) {
      $tagsNow = array();
      $arrayContent[$i] = $row;
      // tags (список тегов в каждому вопросу)
      $query2 = "SELECT name,sef FROM help_tags
                WHERE id_tag IN(".$arrayContent[$i]['tags'].")";
      $res2 = mysql_query($query2) or die(mysql_query());
      
      while($row2 = mysql_fetch_assoc($res2)) {
        $tagsNow[] = $row2;
      }
      $arrayContent[$i]['tags'] = $tagsNow;
      $i++;
    }

  return $arrayContent;
}


Нужно сделать запрос, чтобы выводилась лента вопросов по тегу, из входящих данных - sef (url/чпу тега), например, windows-10
таблицы

help_q - сами вопросы
5a5f61d0df6ad133847423.png
help_tags - теги вопросов
5a5f62129e663553401987.png
answers - ответы к вопросам
5a5f62bbe0e64534057480.png

Насколько я понимаю, запрос нужен такой же как в общей ленте, только добавить WHERE, и так как тегов у одного вопроса может быть несколько, в условии нужно добавить что то типа IN только наоборот.
Из моих неправильных вариантов это:
WHERE h.tags IN (SELECT help_tags.id_tag FROM help_tags WHERE help_tags.sef = 'windows-10')

Мне кажется, что как всегда решение очевидно, но я его, как всегда, не вижу. Возможно лучше для id_tag+id_q (вопросво) сделать отдельную страницу, не знаю.
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы