PHP MYSQL Похожие файлы - PullRequest
       2

PHP MYSQL Похожие файлы

1 голос
/ 23 марта 2020

Мне нужно скачать похожие результаты. Подробная запись, если я записываю данные из определенного файла таблицы «files», я хотел бы видеть другие файлы с такой же записью «id_tag_main» внизу.

У меня есть таблицы:

тегов

id  |  name  | 

 1     one  
 2     two 
 3     three   

тегов_файлов

id | id_tag | id_file | id_tag_main

 1     1        1          3
 2     -        2          2
 3     -        3          2
 4     -        4          2

файлов

id |    name   | 

 1     city  
 2     vehicles 
 3     weather   
 4     gifts

Мне нужен запрос Mysql php, я пытаюсь выполнить LEFT JOIN, но результаты не верны.

Если я выбираю из файлов "транспортных средств", то у транспортных средств есть "id_tag_main" = 2, и я хочу больше файлов, где "id_tag_main" = 2

Ответы [ 2 ]

1 голос
/ 23 марта 2020

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

SELECT f.name
FROM tags_files tf INNER JOIN files f ON tf.id_file = f.id
WHERE id_tag_main = (SELECT id_tag_main 
                     FROM tags_files 
                     WHERE id_file = (SELECT id FROM files WHERE name = 'vehicles' ));
CREATE TABLE tags_files (
  `id` int,
  `id_tag` int,
  `id_file` int,
  `id_tag_main` int
);

INSERT INTO tags_files
  (`id`, `id_tag`, `id_file`, `id_tag_main`)
VALUES
  ('1',     '1',        '1',          '3'),
  ('2',     NULL,        '2',          '2'),
  ('3 ',    NULL,        '3',          '2'),
  ('4',   NULL,        '4',          '2');
✓

✓
CREATE TABLE files (
  `id` int,
  `name` VARCHAR(14)
);

INSERT INTO files
  (`id`, `name`)
VALUES
  ('1',     'city'),
  ('2',     'vehicles'),
  ('3',     'weather'),
  ('4',     'gifts');
✓

✓
CREATE TABLE tags (
  `id` int,
  `name` VARCHAR(11)
);

INSERT INTO tags
  (`id`, `name`)
VALUES
  ('1',     'one'),
  ('2',     'two'),
  ('3',     'three');
✓

✓
SELECT f.name
FROM tags_files tf INNER JOIN files f ON tf.id_file = f.id
WHERE id_tag_main = (SELECT id_tag_main 
                     FROM tags_files 
                     WHERE id_file = (SELECT id FROM files WHERE name = 'vehicles' ));
| name     |
| :------- |
| vehicles |
| weather  |
| gifts    |

db <> скрипка здесь

1 голос
/ 23 марта 2020

Может быть, это это?

   select *
   from files as f1
   left join tags_files on tags_files.id_tag_main = f1.id
   left join files as f2 on tags_files.id_file = f2.id
   where f1.name = 'vehicles'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...