Я хочу сделать так, чтобы скрипт отображал количество совпадающих значений у разных пользователей.Например, в таблице watched
у меня есть идентификатор основного пользователя (1) и заголовки его просмотренных фильмов, а также просмотренных фильмов нескольких других пользователей:
+----+----------+---------+
| id | users_id | watched |
+----+----------+---------+
| 1 | 1 | movie1 |
+----+----------+---------+
| 2 | 1 | movie2 |
+----+----------+---------+
| 3 | 1 | movie3 |
+----+----------+---------+
| 4 | 2 | movie2 |
+----+----------+---------+
| 5 | 2 | movie1 |
+----+----------+---------+
| 6 | 3 | movie1 |
+----+----------+---------+
| 7 | 3 | movie5 |
+----+----------+---------+
| 8 | 3 | movie4 |
+----+----------+---------+
Ожидаемый результат:
my id = `1`;
matched with id `2` 2 times on titles `movie2`, `movie1`;
matched with id `3` 1 times on titles `movie1`;
Или, если идентификатор основного пользователя 3
:
my id = `3`;
matched with id `1` 1 times on titles `movie1`;
matched with id `2` 1 times on titles `movie1`;
И так далее.
Я пытался сделать что-то вроде:
<?php
session_start();
$connect = mysqli_connect("127.0.0.1", "root", "root", "movie");
$query = mysqli_query($connect, "SELECT * FROM profile INNER JOIN users ON profile.users_id = users.id");
$id = $_SESSION['id'];
echo "my id: " . $id;
$movies = mysqli_query($connect, "SELECT * FROM watched WHERE users_id = '$id'");
$titles = array();
for ($i = 0;$i < $movies->num_rows;$i++)
{
$result2 = $movies->fetch_assoc();
$watched = $result2['watched'];
$find = mysqli_query($connect, "SELECT * FROM watched WHERE watched = '$watched'");
for ($l = 0;$l < $find->num_rows;$l++)
{
$found = $find->fetch_assoc();
if ($found['watched'] === $result2['watched'] and $found['users_id'] !== $id)
{
$titles[] = $found['watched'];
}
}
}
$count_titles = array();
foreach ($titles as $a)
{
@$count_titles[$a]++;
}
$matches = count($count_titles); //num of matches
for ($i = 0;$i < $query->num_rows;$i++)
{
$result = $query->fetch_assoc();
?>
<div><?php
echo "matched with id " . $result['id'] . " ";
echo $matches . " times";
foreach (array_keys($count_titles) as $key)
{
echo " on titles " . $key;
}
?></div>
<?php
} ?>
Но он отображает только общее количество совпадений по всей таблице, а не для каждого пользователя в отдельности.Как мне сделать так, как описано выше?
три таблицы:
CREATE TABLE watched (
`id` INTEGER,
`users_id` INTEGER,
`watched` VARCHAR(6)
);
INSERT INTO watched
(`id`, `users_id`, `watched`)
VALUES
('1', '1', 'movie1'),
('2', '1', 'movie2'),
('3', '1', 'movie3'),
('4', '2', 'movie2'),
('5', '2', 'movie1'),
('6', '3', 'movie1'),
('7', '3', 'movie5'),
('8', '3', 'movie4');
CREATE TABLE users (
`id` INTEGER,
`name` VARCHAR(355),
`email` VARCHAR(355)
);
INSERT INTO users
(`id`, `name`, `email`)
VALUES
('1', 'name1', 'email1@mail.com'),
('2', 'name2', 'email2@mail.com'),
('3', 'name3', 'email3@mail.com');
CREATE TABLE profile (
`id` INTEGER,
`users_id` INTEGER,
`about` VARCHAR(355)
);
INSERT INTO profile
(`id`, `users_id`, `about`)
VALUES
('1', '1', 'something about me'),
('2', '2', 'something about me'),
('3', '3', 'something about me');