Условия: как минимум 1, как максимум 3 строки, где userid=$_SESSION['id']; наличие для этих строк в столбцах active значений 1, 2 или 3 (обязательно все три, без повторений).
Задача: узнать, имеется ли в БД для этих строк значения active = 1, 2 или 3. Если какое-либо из значений отсутствует, записать их по порядку (сортировка -
значения столбца level по убыванию), затем редирект. Если все значения присутствуют, сделать новую проверку по level и если порядок строк при сортировке по lvl изменился, перезаписать значения (1, 2, 3).
Пробный код:
$check_main=$mysqli->query("SELECT `active` FROM `characters` WHERE `userid`='".$_SESSION['id']."' AND (`active`='1' OR `active`='2' OR `active`='3')");
// пытаемся узнать, есть ли значения 1, 2 или 3
$check_main=$check_main->fetch_assoc();
if($check_main_second==false) {
// если отсутствуют, внесение
$select_char=$mysqli->query("SELECT `level` FROM `characters` WHERE `userid`='".$_SESSION['id']."' ORDER BY `level` DESC LIMIT 1,1");
$select_char->fetch_assoc();
$mysqli->query("UPDATE `characters` SET `active`='1' WHERE `userid`='".$_SESSION['id']."' AND `level`='".$select_char."'");
$select_char=$mysqli->query("SELECT `level` FROM `characters` WHERE `userid`='".$_SESSION['id']."' ORDER BY `level` DESC LIMIT 2,2");
$select_char->fetch_assoc();
$mysqli->query("UPDATE `characters` SET `active`='2' WHERE `userid`='".$_SESSION['id']."' AND `level`='".$select_char."'");
$select_char=$mysqli->query("SELECT `level` FROM `characters` WHERE `userid`='".$_SESSION['id']."' ORDER BY `level` DESC LIMIT 3,3");
$select_char->fetch_assoc();
$mysqli->query("UPDATE `characters` SET `active`='3' WHERE `userid`='".$_SESSION['id']."' AND `level`='".$select_char."'");
exit(redirect("../URL"));
}
Страшный код, при котором невозможна конвертация в строку, а также отсутствует проверка при наличии значений. Много условий, как это выполнить ума не приложу.
наличие ... в столбцах active значений 1, 2 или 3 (обязательно все три, без повторений)
Если список возможных значений active исчерпывается этими значениями, то
HAVING COUNT(active) = 3
AND SUM(DISTINCT active) = 6
Если нет, то второе условие усложнится до
AND SUM(DISTINCT CASE WHEN active IN (1,2,3) THEN active END) = 6
Сборка персонального компьютера от Artline: умный выбор для современных пользователей