ВЫБЕРИТЕ count () с двумя одинаковыми условиями

У меня есть следующая база данных. В каждом разговоре есть два участника. Я хотел бы подсчитать количество беседы, когда участник.participant_id = идентификатор участника1 и участник.частный_ид = идентификатор участника2.

CREATE TABLE IF NOT EXISTS `users` (
    `user_id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_name` VARCHAR(16)
);

CREATE TABLE IF NOT EXISTS `conversation` (
    `conversation_id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT UNSIGNED,
    `time_started` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `time_closed` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE IF NOT EXISTS `participant` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `conversation_id` BIGINT UNSIGNED,
    `participant_id` BIGINT UNSIGNED,
    `time_joined` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `time_left` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (conversation_id) REFERENCES conversation(conversation_id),
    FOREIGN KEY (participant_id) REFERENCES users(user_id)
);

Я пробовал что-то вроде, но у меня получилось count = 0:

SELECT count(conversation.conversation_id)
FROM `conversation`
INNER JOIN `participant` on participant.conversation_id = conversation.conversation_id
WHERE participant.participant_id = ? AND participant.participant_id = ?

Мне удалось сделать это по-другому, но я хотел бы знать, можно ли сделать это в одном запросе. Спасибо за вашу помощь! :-)

Если я вас правильно понимаю, вы пытаетесь получить счетчик, в котором идентификатор участника - это идентификатор участника1 или идентификатор участника2. Почему бы не использовать конструкцию participant_id IN (participantID1, participantID2)?

Claudiu Tomescu 26.09.2018 21:38

Вы захотите присоединиться к таблице участников дважды (один раз для каждого идентификатора участника) и проверить каждый экземпляр отдельно.

miken32 26.09.2018 21:40

Привет, Клаудио, я пытаюсь получить счетчик, где member_id - это membersID1 И membersID2 (два участника в одном разговоре)

Minh Pham 26.09.2018 21:42

понял Минь Фам, я неправильно понял ваши требования. В этом случае предложение @ miken32 - это то, что вам нужно сделать ...

Claudiu Tomescu 26.09.2018 21:49
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
4
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На данный момент я не могу это проверить, но должно сработать что-то вроде этого:

SELECT count(c.conversation_id)
FROM conversation c
INNER JOIN participant p1 ON p1.conversation_id = c.conversation_id
INNER JOIN participant p2 ON p2.conversation_id = c.conversation_id
WHERE p1.participant_id = ? AND p2.participant_id = ?

Думаю, я бы использовал OR вместо AND, поскольку вполне вероятно, что (по крайней мере, иногда) в разговоре участвуют два разных участника.

StoneGiant 26.09.2018 21:56

Вопрос был специально задан для разговоров, в которых участвовали оба идентификатора, следовательно, AND.

miken32 26.09.2018 21:57

Я не интерпретировал это так, но ладно. Виноват.

StoneGiant 26.09.2018 21:59

Другие вопросы по теме