WITH RECURSIVE
-- Тестовая выборка. Если есть "живая" таблица, то эту выборку можно убрать
t as (select 10.000 value union
select 10.001 union
select 10.002 union
select 10.003 union
select 10.005 union
select 10.009 -- специально добавил контр. пример
),
-- Таблица-генератор последовательности чисел от min(t.value) до max(t.value) с шагом 0.001 с помощью CTE (есть ограничение по глубине рекурсии!)
num_series AS (
SELECT (select min(value) from t) AS num
UNION ALL
SELECT num + 0.001 FROM num_series
WHERE num < (select max(value) from t)
)
-- Запрос, в котором сопоставляем таблицу генератор и исходную таблицу, чтобы найти недостающие кванты
SELECT *
FROM num_series
where not exists(select t.value from t where t.value = num_series.num)
and num_series.num >= 10.000
select count(case when scv.date >= CURDATE() then 1 end) today_count,
count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) and scv.date < CURDATE() then 1 end) yesterday_count,
count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) then 1 end) week_count,
count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) then 1 end) month_count
from statistics_couter_visit as scv
where scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) -- тут ограничение по макс. окну просмотра статистики, то есть по month_count
select count(case when scv.date >= UNIX_TIMESTAMP(CURDATE()) then 1 end) today_count,
count(case when scv.date >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) and scv.date < UNIX_TIMESTAMP(CURDATE()) then 1 end) yesterday_count,
count(case when scv.date >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 WEEK)) then 1 end) week_count,
count(case when scv.date >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) then 1 end) month_count
from statistics_couter_visit as scv
where scv.date >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) -- тут ограничение по макс. окну просмотра статистики, то есть по month_count
при желании ее удалять
if(isset($_POST['action']) && $_POST['action'] == 'delete') // есть action и он равен delete
{
$link = mysqli_connect($host, $user, $password, $database);
$sql = "DELETE FROM `program_day_1`"; // по одной инструкции удаления на каждую таблицу
$res = mysqli_query($link, $sql);
$sql = "DELETE FROM `program_day_2`";
$res = mysqli_query($link, $sql);
mysqli_close($link);
header('location: program-admin.php');
}
while($row=mysqli_fetch_array($res))
{
// #########################
// #### начало тела цикла #####
// ##########################
$iduser=$id;
$idkat=$row['idkat'];
// #########################
// #### конец тела цикла #####
// ##########################
}
$res=mysqli_prepare($bd, "INSERT INTO zakaz (iduser,idkat)
VALUES(?,?)");
mysqli_stmt_bind_param($res, 'ii', $iduser,$idkat); // подставляем переменные, которые присвоились на ПОСЛЕДНЕМ прогоне цикла
$result2=mysqli_stmt_execute($res);
while($row=mysqli_fetch_array($res))
{
// #########################
// #### начало тела цикла #####
// ##########################
$iduser=$id;
$idkat=$row['idkat'];
$res2=mysqli_prepare($bd, "INSERT INTO zakaz (iduser,idkat)
VALUES(?,?)");
mysqli_stmt_bind_param($res2, 'ii', $iduser,$idkat); // подставляем переменные, которые присвоились на ТЕКУЩЕМ прогоне цикла
$result2=mysqli_stmt_execute($res2);
// #########################
// #### конец тела цикла #####
// ##########################
}
$result =
[
1 => // department_id
[
1 /* 000i индекс */ => [1 /*индекс вида предмета*/ => '1_1_0001', 2 => '1_2_0001', 3 => '1_3_0001' /* непосредственно данные */],
2 /* 000i индекс */ => [1 /*индекс вида предмета*/ => '1_1_0002', 2 => '1_2_0002', 3 => '1_3_0002' /* непосредственно данные */],
3 /* 000i индекс */ => [1 /*индекс вида предмета*/ => '1_1_0003', 3 => '1_3_0003' /* непосредственно данные */],
...
],
2 =>
...
];
select t.department_id,
t1.item as type_1,
t2.item as type_2,
...
from t
left join (select t.department_id, t.item from t where t.type_id = 1) t1 on t1.department_id = t.department_id
left join (select t.department_id, t.item from t where t.type_id = 2) t2 on t2.department_id = t.department_id
...
where 1 = 1
and (SUBSTRING_INDEX(t.item, '_', -1) + 0 = SUBSTRING_INDEX(t1.item, '_', -1) + 0 or t1.item is null)
and (SUBSTRING_INDEX(t.item, '_', -1) + 0 = SUBSTRING_INDEX(t2.item, '_', -1) + 0 or t2.item is null)
...
-- тут нужно получить равенство всех субиндексов 0000i от t.item сравнить со всеми tn.item
order by t.department_id, SUBSTRING_INDEX(t.item, '_', -1) + 0
<?php
error_reporting(E_ALL); // репорт ошибок в файл error_log
ini_set('display_errors', 'On'); // вывод сообщения об ошибке
var_dump($_POST);
var_dump($pdo->errorInfo());
писать скрипт, который будет вытаскивать по запросу необходимые записи, далее для каждой записи разбирать сер.массив, находить нужное значение, изменять его и затем записывать новый массив с изменённым значением в БД
/* создание подготавливаемого запроса */
$stmt = $mysql->prepare("select sum(c.`Price`) as price_sum
from `dogovor` d
join `catalog` c on c.`Id_Product` = d.`Id_Product`
where d.`id_client` = ?");
/* связывание параметров с метками */
$stmt->bind_param("i", $id_client);
/* выполнение запроса */
$result = $stmt->execute();
/* выборка результатов */
$row = $result->fetch_accos();
if($row)
{
echo 'Общая стоимость всех заказов клиента: '.$row['price_sum'];
}
else
{
echo 'Запрос не дал результата!';
}
Каждая табличка - это отдельный файл SQL.
не больше двух раз в неделю
select count(*) as cnt -- кол-во записей на этой неделе
from record as r
where r.user_id = ? -- пользователь
-- дата текущего понедельника (от curdate()) <= r.add_date < дата следующего понедельника (от curdate())
and r.add_date >= subdate(curdate(), interval weekday(curdate()) day) -- текущ. понедельник с точки зрения curdate()
and r.add_date < subdate(curdate(), interval weekday(curdate()) - 7 day) -- следующий понедельник с точки зрения curdate()
select count(*) as cnt -- кол-во записей за последние 7 дней
from record as r
where r.user_id = ? -- пользователь
and r.add_date > subdate(curdate(), interval 7 day)
select A.*
from (SELECT `date`, `name`, phone, count() over (partition by phone) phone_count
FROM `myusers`
) A
where A.phone_count > 1
ORDER BY date ASC
select `date`, `name`, phone, p.phone_count
from `myusers` as mu
join (SELECT phone, count(*) phone_count
FROM `myusers`
group by phone) p on p.phone = mu.phone
where p.phone_count > 1
ORDER BY mu.date ASC
SELECT A.*
from (
SELECT class_messages.id as class_messages_id,
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title,
row_number() over (partition by `class_messages_chat`.`chat_id` order by class_messages.id desc) rn -- этой функцией нумеруем в пределах чата сообщения
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
) A
where A.Rn = 1 -- оставляем, все что с первым номером счетчика
order by A.class_messages_id desc
SELECT A.*
from (
SELECT
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title,
IF(@prev <> `class_messages_chat`.`chat_id`, @rn:=1,@rn), @prev:= `class_messages_chat`.`chat_id`, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`,
(SELECT @rn:=1)rn,
(SELECT @prev:=-1)prev
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
order by class_messages.id desc
) A
where A.Rn = 1 -- оставляем, все что с первым номером счетчика
select B.*
from (SELECT A.*,
IF(@prev <> A.chat_id, @rn:=1,@rn), @prev:= A.chat_id, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
from (
SELECT
`class_messages_chat`.`to_user_id`,
`class_messages_chat`.`from_user_id`,
`class_users`.`id`,
`class_users`.`user_status`,
`class_users`.`online`,
`class_messages_chat`.`chat_id`,
`class_messages_chat`.`ad_id`,
`class_ads`.user_id,
`class_ads`.title
FROM `class_messages_chat`
inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
WHERE ( `class_messages_chat`.`to_user_id` = 133337
or `class_messages_chat`.`from_user_id` = 133337)
and class_messages_chat.chat_id is not null
order by class_messages.id desc
) A,
(SELECT @rn:=1)rn,
(SELECT @prev:=-1)prev
) B
where B.Rn = 1 -- оставляем, все что с первым номером счетчика