Сопоставить элементы массива в запросе - PullRequest
2 голосов
/ 26 января 2012

Я хочу выбрать сообщение, только если $arr_tags соответствует всем array_elements with tags_is_tags.Например, в этой ситуации будет выведено 0 сообщений, потому что один элемент массива не совпадает с tags_id_tags

Как мне сделать что-то подобное?

$arr_tags = array("16", "17", "36", "543"); // the dimension is not always the same

post_id_post        tags_id_tags    
    282                      16     
    282                      17     
    282                      36 
    282                      546 

У меня есть этот код, нозапрос не завершен.

            $sql = $db -> prepare("
                SELECT post_id_post 
                FROM posts
                // ...
            ");

            $sql -> bind_param('s', $val);
            $sql -> execute();
            $sql -> bind_result($d_post);

Спасибо за ваше время

Ответы [ 2 ]

4 голосов
/ 26 января 2012
  SELECT post_id_post
    FROM posts
   WHERE tags_id_tags IN ("16", "17", "36", "543")
GROUP BY post_id_post
  HAVING COUNT(*) = 4

Вы помещаете все необходимые идентификаторы тегов в предложение IN и меняете число в выражении COUNT(*) = 4 на количество переданных тегов

0 голосов
/ 26 января 2012

Мне кажется, что столько, сколько вы хотите знать, как задать правильный вопрос. Волшебные слова здесь - «реляционное разделение».

Это один из операторов в реляционной алгебре Кодда , и с тех пор было предложено несколько вариантов. Совсем недавно Крис Дата предложил заменить всю концепцию на отношения изображений .

В SQL нет явного оператора деления. Существует несколько обходных путей с использованием другого оператора, и наиболее подходящий будет зависеть от ваших требований, включая точное деление или деление с остатком и способ обработки пустого делителя. Тогда есть обычные соображения: продукт и версия SQL, производительность, личный стиль и вкус и т. Д.

Вот пара статей, которые должны помочь вам с этими вариантами:

О том, как сделать реляционное деление понятным

Разделенное Мы стоим: SQL реляционного разделения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...