Вопрос:

Я хочу найти строки, где все мои теги могут быть применены

mysql sql phpmyadmin tags

28 просмотра

4 ответа

57 Репутация автора

У меня есть таблица следующим образом

введите описание изображения здесь

Я хочу найти u_t_upload_id, где применяются оба u_t_tag_id - 1 и 2. В данном случае это 1, так как u_t_tag_id - 1 и 2 применяется к u_t_upload_id 1.

введите описание изображения здесь

Есть ли простой запрос для решения этой проблемы?

То, что я привел выше, является примером, который действительно нужен, чтобы отобразить u_t_upload_id, где применяются все заданные u_t_tag_id. Это 1 и 2 - пример ввода.

Автор: Dijish U.K Источник Размещён: 10.04.2017 05:14

Ответы (4)


0 плюса

57 Репутация автора

Я нашел простой запрос, чтобы решить эту проблему

SELECT u_t_upload_id FROM uploads_tags WHERE (u_t_tag_id=1 OR u_t_tag_id=2) GROUP BY u_t_upload_id HAVING COUNT(*)=2
Автор: Dijish U.K Размещён: 10.04.2017 05:31

1 плюс

63192 Репутация автора

Решение

Вы можете использовать следующий запрос:

SELECT u_t_upload_id
FROM uploads_tags
WHERE u_t_tag_id IN (1, 2)
GROUP BY u_t_upload_id
HAVING COUNT(DISTINCT u_t_tag_id) = 2

Предложение HAVINGпроверяет u_t_upload_idгруппы, имеющие 2 разных u_t_tag_id значения. Поскольку WHEREпредложение отфильтровывает записи, отличные от тех, которые имеют u_t_tag_id IN (1, 2), запрос гарантированно возвращает те, u_t_upload_idкоторые связаны с обоими u_t_tag_id значениями.

Автор: Giorgos Betsos Размещён: 10.04.2017 05:34

0 плюса

326 Репутация автора

Попробуй это:

SELECT Distinct(u_t_upload_id) FROM table WHERE u_t_upload_id = 1 AND u_t_upload_id = 2
Автор: ManishPrajapati Размещён: 10.04.2017 05:36

0 плюса

2084 Репутация автора

Я все еще изучаю реляционное подразделение, поэтому я не уверен на 100% в следующем коде. Но здесь идет ...

SELECT *
FROM tblTable AS X
WHERE NOT EXISTS ( SELECT *
                   FROM tblTable AS Y
                   WHERE Y.u_t_tag_id IN ( 1, 2 )
                     AND NOT EXISTS ( SELECT *
                                      FROM tblTable AS Z
                                      WHERE Z.u_t_upload_id = X.u_t_upload_id
                                        AND Z.u_t_tag_id = Y.u_t_tag_id )
                 )
ORDER BY u_t_upload_id;

Я протестировал приведенный выше код на тестовой базе данных, созданной с помощью следующего скрипта ...

CREATE DATABASE RelationalDivision002;
USE RelationalDivision002;
CREATE TABLE tblTable
(
    u_t_id          INT,
    u_t_upload_id   INT,
    u_t_tag_id      INT
);
INSERT INTO tblTable( u_t_id,
                      u_t_upload_id,
                      u_t_tag_id )
VALUES ( 1, 1, 1 ),
       ( 2, 1, 2 ),
       ( 3, 2, 3 ),
       ( 4, 3, 4 ),
       ( 5, 3, 5 ),
       ( 6, 3, 6 ),
       ( 7, 2, 1 ),
       ( 7, 3, 1 );

Я проверил код, используя любую комбинацию внутренних SELECTусловий WHERE. Вышесказанное является единственным, чтобы произвести желаемый результат.

Я почти понял, почему.

Если у вас есть какие-либо вопросы или комментарии, пожалуйста, свяжитесь со мной.

Спасибо.

Автор: toonice Размещён: 10.04.2017 05:58
Вопросы из категории :
32x32