Выборка MySQL

Discussion in 'PHP' started by Redfern89, 3 May 2016.

  1. Redfern89

    Redfern89 New Member

    Joined:
    12 Jul 2012
    Messages:
    42
    Likes Received:
    1
    Reputations:
    -3
    Доброго времени суток=) В общем есть 3 таблицы: tags, arts, arts_tags... Допустим таблица arts имеет всего два поля [id, title], таблица tags имеет поля [id, tag_name] и наконец связующая таблица имеет поля [id, art_id, tag_id].. Все уже поняли, что я вывожу статьи с тегами. Но вот дошло дело до поиска по тегам и я уже 5й час мучаюсь с одной дилемой... В общем делаю такой вот запрос:

    Code:
    SELECT arts.id,
           arts.title,
           GROUP_CONCAT(tags.name) AS tag_names
    FROM arts
    JOIN arts_tags ON arts_tags.art_id = arts.id
    JOIN tags ON tags.id = arts_tags.tag_id
    WHERE ((MATCH (arts.title) AGAINST ('"Что такое"'))
           AND (tags.id IN (1,
                            2)))
    GROUP BY arts.id
    HAVING COUNT(*) = 2
    
    Вот если что примеры данных таблиц:
    Code:
    Enter password: **********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3325
    Server version: 5.7.12-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> USE rass
    Database changed
    mysql> SELECT arts.id, arts.title FROM arts LIMIT 2;
    +----+--------------------------------------------------------+
    | id | title                                                  |
    +----+--------------------------------------------------------+
    |  1 | PHP: Что такое PHP? - Manual                           |
    |  2 | Справочное руководство по MySQL                        |
    +----+--------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT * FROM tags;
    +----+--------------+
    | id | name         |
    +----+--------------+
    |  1 | Кодинг       |
    |  2 | PHP          |
    |  3 | MySQL        |
    +----+--------------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT * FROM arts_tags WHERE 1;
    +----+--------+--------+
    | id | art_id | tag_id |
    +----+--------+--------+
    |  1 |      1 |      1 |
    |  2 |      1 |      2 |
    |  3 |      1 |      3 |
    |  4 |      2 |      1 |
    +----+--------+--------+
    4 rows in set (0.00 sec)
    
    mysql> SELECT arts.id, arts.title, GROUP_CONCAT( tags.name ) AS tag_names FROM a
    rts JOIN arts_tags ON arts_tags.art_id = arts.id JOIN tags ON tags.id = arts_tag
    s.tag_id WHERE ( (MATCH (arts.title) AGAINST ('"Что такое"')) AND (tags.id IN (1
    ,2)) ) GROUP by arts.id HAVING COUNT(*) = 2
        -> ;
    +----+--------------------------------------+------------------+
    | id | title                                | tag_names        |
    +----+--------------------------------------+------------------+
    |  1 | PHP: Что такое PHP? - Manual         | Кодинг,PHP       |
    +----+--------------------------------------+------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
    Судя по таблице arts_tags у статьи 3 тега, но поиск идет по двум и выводит только 2 тега! Как сделать так, что-бы выводило все?
     
    #1 Redfern89, 3 May 2016
    Last edited: 4 May 2016
  2. Absurd

    Absurd Member

    Joined:
    15 Aug 2016
    Messages:
    20
    Likes Received:
    10
    Reputations:
    0
    Похоже в запросе дополнительное условие на айди тега
    AND (tags.id IN (1,2)

    Как вариант так попробовать:
    AND (tags.id IN (1,2,3)
     
Loading...
Similar Threads - Выборка MySQL
  1. GAiN
    Replies:
    3
    Views:
    7,259