MySQL 5.7 PDO
Структура таблицы: id, c1, c2, c3, c4, c5, c6, c7,json
с1,...c7 - (комбинации) значения 0, 1, 2,
json - это значения с1,...c7 в формате json
пример записей в таблице
id,c1,c2,c3,c4,c5,c6,c7,json
1, 1, 1, 1, 1, 1, 1, 1, [1, 1, 1, 1, 1, 1, 1]
2, 1, 1, 1, 1, 1, 1, 0, [1, 1, 1, 1, 1, 1, 0]
3, 1, 1, 1, 1, 1, 1, 2, [1, 1, 1, 1, 1, 1, 2]
4, 1, 1, 1, 1, 1, 0, 1, [1, 1, 1, 1, 1, 0, 1]
5, 1, 1, 1, 1, 1, 0, 0, [1, 1, 1, 1, 1, 0, 0]
...
Пример запроса который выбирает все записи которые гарантируют одно совпадение 7 из 7 , при вводе
следующих параметров с1=1,0,2; c2=1,0; c3=2, c4=1; c5=1; c6=1; c7=1
$database->prepare("SELECT id, json FROM test
WHERE (c1= 1 OR c1=0 OR c1=2) AND (c2= 1 OR c2=0) AND (c3=2) AND c4=1 AND c5=1 AND c6=1 AND c7=1 ");
$database->execute();
$sql1 = $sql2 = $database->fetchAllAssociative();
далее в цикле определяю количество возможных попаданий, то есть к примеру 7 раз полностью совпали 1 раз, 6 совпало из 7 = 3раза, 5 совпало из 7 = 10 раз
$i=0;
foreach ($sql1 as $k=>$v) {
$v_json = json_decode($v['json']);
foreach ($sql2 as $k2 => $v2) {
$i++;
$v2_json = json_decode($v2['json']);
// получить количество совпавших чисел в двух массивах
$k_count[$i] = count(array_intersect_assoc($v_json, $v2_json));
if ($k_count[$i] == 7)
$res[7]++;
if ($k_count[$i] == 6)
$res[6]++;
if ($k_count[$i] == 5)
$res[5]++;
}
}
if($res['7']> 0) $r['7'] = $res['7']/count($count);
else $r['7'] = 0;
if($res['6']> 0) $r['6'] = $res['6']/count($count);
else $r['6'] = 0;
if($res['5']> 0) $r['5'] = $res['5']/count($count);
else $r['5'] = 0;
Как получить такие результаты в MySQL при запросе?