Извлечение записей из 3 разных таблиц с условием в SQL

0

Поэтому у меня возникают проблемы с извлечением определенного типа записей из базы данных.

У меня три таблицы

  1. друзья
  2. Читают
  3. PictureGalleries

Вот пример того, как выглядит таблица

Friends:

|id | senderId | receiverId | accepted |   
|---|----------| -----------| ---------|   
| 1 | 1        | 12         | 1        |     
| 2 | 12       | 2          | 1        |  
| 2 | 12       | 2          | 1        |


Followers:

| id | userId | UserIsFollowing |  
| -- | ------ | --------------- |  
| 1  | 12     | 63              |  
| 2  | 22     | 12              |

PictureGalleries:

| id | UserId |   
| -- | ------ |  
| 1  | 13     |  
| 2  | 12     |  
| 3  | 1      |  
| 4  | 10     |  
| 5  | 2      |  
| 6  | 63     | 

Так вот, вот проблема!

Я хочу выбрать все из картинных галерей
Если у пользователя есть отношения дружбы с userId 12, где принято 1
И где пользовательскийID 12 следует за конкретным пользователем

Итак, в основном я хочу посмотреть, как выглядит галерея изображений следующих пользователей ID: 1,2 и 63, которые будут выглядеть так:

| id | UserID |
| -- | ------ |
| 3  | 1      |
| 5  | 2      |
| 6  | 6      |

Я просто надеюсь, что я не смутил вас, ребята. Спасибо!

Теги:
database
mysqli

2 ответа

0
Лучший ответ

использовать союз и подзапрос, чтобы получить желаемый результат

   select p.id,p.UserId from
   ( select UserIsFollowing as id from 
   Followers fl where userId =12 
   union select senderId from friends f 
   where f.receiverId =12 AND accepted=1 
   union select receiverId from friends f 
    where f.senderId =12 AND accepted=1 
   ) as t join PictureGalleries p on t.id=p.UserId 
  • 0
    Я сделал несколько изменений в вашем ответе, и это сработало. Вот. выберите p.id, p.UserId из (выберите UserIsFollowing в качестве идентификатора от Последователей fl, где userId = 12 union выберите senderId из друзей f, где f.receiverId = 12 И принято = 1 union, выберите receiveId из друзей f, где f.senderId = 12 AND принято = 1) как присоединиться к PictureGalleries p на t.id = p.UserId
  • 0
    @kelrob, если это поможет, примите мой ответ, я собираюсь обновить ваш ответ на несколько изменений
0

Я думаю, что этот запрос показывает, что вы хотите:

select * from PictureGalleries
    join Followers on Followers.userId = PictureGalleries.UserId
    where exists (select 1 from Friends where (Friends.senderId = PictureGalleries.UserId or Friends.receiverId  = PictureGalleries.UserId) and accepted = 1)
    and Followers.UserIsFollowing  = :user_id

Но я думаю, что ваша модель может быть улучшена

РЕДАКТИРОВАТЬ:

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

"Если идентификатор пользователя имеет отношения дружбы с userId 12, где принято 1, и где идентификатор пользователя 12 следует за конкретным пользователем"

Я думаю, вы имеете в виду OR, поэтому SQL должен выглядеть примерно так:

select * from PictureGalleries
where exists (select 1 from Friends where (Friends.senderId = PictureGalleries.UserId or Friends.receiverId  = PictureGalleries.UserId) and accepted = 1)
OR exists (select 1 from Followers where Followers.userId = PictureGalleries.UserId and Followers.UserIsFollowing  = :user_id
  • 0
    Я продолжаю получать пустые результаты, когда я пытался запустить SQL-запрос
  • 0
    Таблица подписчиков заполнена? Или только 2 строки?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню