MySQL5.7(PHP)比较两个json数组并获得DFefference

MySQL5.7(PHP)比较两个json数组并获得DFefference,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我有表胶片和列id|数组_的img img的列array\u包含类似于[“1”、“2”、“3”的JSON数组 我还有一个会话变量数组$session\u var=[1,2],它在json\u encode之后变成[“1”,“2”] 因此,我的目标是获得单个随机整数值,它不在$session\u var中,而是在电影中img的列数组中的一行中 在上面的示例中,结果必须是3 可能的逻辑: 合并两个json并删除重复项 通过比较两个json得到唯一的元素 我浏览了这些函数,但不知道如何在我的情况下

我有表
胶片
和列
id
|
数组_的img

img的列
array\u包含类似于[“1”、“2”、“3”的JSON数组

我还有一个会话变量数组
$session\u var
=[1,2],它在
json\u encode
之后变成[“1”,“2”]

因此,我的目标是获得单个随机整数值,它不在
$session\u var
中,而是在
电影中
img的
列数组中的一行中

在上面的示例中,结果必须是
3

可能的逻辑:

  • 合并两个json并删除重复项
  • 通过比较两个json得到唯一的元素
我浏览了这些函数,但不知道如何在我的情况下使用它们:

  • JSON_包含
  • JSON_重叠(MySQL版本>5.7)
  • JSON_键
  • JSON_合并_保留
  • JSON\u合并\u补丁
一些代码可以查看语法

$session_var = json_encode($session_var);
$query = "SELECT * FROM films WHERE ORDER BY RAND() LIMIT 1";
非常感谢你的帮助

谢谢你的建议,我做了一些工作并做到了这一点

require_once 'connection.php';
$link = mysqli_connect($host, $user, $password, $database) or die("Error_connect_1 " . mysqli_error($link));

session_start();
$session_var = $_SESSION["arr_of_img"] ? $_SESSION["arr_of_img"] : [];

//count possible variants [summary of json_length_field]
$query = "SELECT SUM(JSON_LENGTH(arr_of_img)) AS summary FROM films WHERE show_this IS NULL";
$result = mysqli_query($link, $query) or die("Error_connect_2 " . mysqli_error($link));
$result = mysqli_fetch_array($result, MYSQLI_ASSOC);
$summary = $result['summary'];

//get the whole table and random it
$query = "SELECT * FROM films WHERE show_this IS NULL ORDER BY RAND()";
$result = mysqli_query($link, $query) or die("Error_connect_2 " . mysqli_error($link));
$table = mysqli_fetch_all($result, MYSQLI_ASSOC);

//walk through the table and find array of different values
foreach ($table as $row) {
    $arr_of_img_db = $row['arr_of_img'];
    $arr_of_img_db = json_decode($arr_of_img_db);
    $result = array_diff($arr_of_img_db, $session_var);
    if ($result) break;
}

//get single random value and get image by this value
if ($result) {
    $arr_of_img = $result;
    $img = array_rand($arr_of_img, 1);
    $img = $arr_of_img[$img];

    $query2 = "SELECT id, src as img,show_this  FROM img WHERE id LIKE '" . $img . "' AND show_this IS NULL LIMIT 1";
    $result2 = mysqli_query($link, $query2) or die("Error_connect_2 " . mysqli_error($link));
    $result = mysqli_fetch_array($result2, MYSQLI_ASSOC);
}

echo json_encode($result);
mysqli_close($link);

如果没有MySQL 8+,这在PHP中可能会更容易做到。@Nick非常感谢。我想我已经做到了你的意思。对不起,我帮不上忙了。如果您确实升级到MySQL 8,您可以对这两个JSON值使用
JSON\u TABLE
,并使用反连接来获取不在这两个值中的值。