// тут опущены действия связанные с формированием запроса,
// на этом этапе вы каким-то способом получили выборку данных из таблицы links
foreach($rows as $row)
{
echo '<a href="'.$row['link_href'].'" title="'.$row['link_title'].'">'.$row['link_text'].'</a><br/>';
}
update table_1 t1
set t1.column_1 = A
where exists (select 1 from table_2 t2 where t2.какой-то-связный-ключ-с-t1 = t1.какой-то-связный-ключ-с-t2 and t2.column_1 = B)
select * from messages m
where :from_id in (m.from_id, m.to_id)
and (select count(*)
from messages m2
where (m2.to_id = m.to_id and m2.from_id = m.from_id
or m2.to_id = m.from_id and m2.from_id = m.to_id)
and m2.id > m.id
) < 1
order by id desc
select * from messages m
where (m.to_id = :to_id and m.from_id = :from_id
or m.to_id = :from_id and m.from_id = :to_id)
order by id asc
SELECT
city.id,
city.name,
country.name,
salary,
country.is_here
FROM city
LEFT JOIN country ON city.cid = country.id
union all
SELECT
city.id,
city.name,
country.name,
salary + 2000,
1
FROM city
LEFT JOIN country ON city.cid = country.id
where (country.id is null or country.is_here = 0)
model_id = '269'
AND partner_id = '0'
AND size <= '32'
SELECT id, size, price, date
FROM prices p
WHERE model_id = 269
AND partner_id = 0
AND date_time <= '2021-10-19'
AND (select count(*)
from prices p2
where -- сюда нужно прописать параметры строк, по которым будет определяться окно счетчика
-- то есть, отсчет счетчика будет в пределах одного размера, одной и той же модели, одного и того де партнера.
p2.size = p.size
and p2.partner_id = p.partner_id
and p2.model_id = p.model_id
-- а тут параметр, чем отличается одна строка счетчика от другой
and p2.date > p.date
) < 1 -- сколько строк отсечь от категории (n + 1) ?
order by p.date desc
select A.*
from
(
SELECT d.id AS dialog_id,
d.date_latest_message,
(select max(DM.added_date)
from dialog_messages dm3
where dm3.dialog_id = dm.dialog_id
) as datetime_latest_message,
Dm.Id as Dm_Id,
DM.message,
DM.added_date
FROM dialogs d
join dialog_messages dm on DM.dialog_id = D.dialog_id
WHERE (select count(*)
from dialog_messages dm2
where dm2.dialog_id = dm.dialog_id
and dm2.id > dm.id -- по идент. будет эффективнее работать, чем по дате-время, к тому же первичный ключ, как правило, проиндексирован, не требуется доп. индексов
) < 3 -- берем только те сообщения, которые позднее опубликованы чем текущее (3 вышестоящих)
and DATE(d.date_latest_message BETWEEN) '2020-10-01' AND '2021-10-08'
) A
order by A.datetime_latest_message desc, A.Dm_Id desc
select A.*
from
(
SELECT
d.id AS dialog_id,
d.date_latest_message,
(select max(DM.added_date)
from dialog_messages dm3
where dm3.dialog_id = dm.dialog_id
) as datetime_latest_message,
Dm.Id as Dm_Id,
DM.message,
DM.added_date AS message_added_date,
row_number() over (partition by d.id -- окно счетчика в пределах идент. диалога
order by DM.Id desc -- направление сортировки счетчика
) dm_rownum -- счетчик для отсечения порций
FROM dialogs d
join dialog_messages dm on DM.dialog_id = D.dialog_id
WHERE DATE(d.date_latest_message) BETWEEN '2020-10-01' AND '2021-10-08'
) A
where A.dm_rownum <= 3 -- отсекаем нужное число "локальных" отсчетов
ORDER BY A.datetime_latest_message DESC, A.Dm_Id DESC
select mod_f1, replace(mod_f1, '.png', '.webp') as result_mod_f1,
mod_f2, replace(mod_f2, '.png', '.webp') as result_mod_f2
from table
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')*/
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')
where mod_f1 like '%.png%'
or mod_f2 like '%.png%'
LIMIT 1000 */
$max_cart_item_count = 500;
$curr_cart_item_count = min(count($_SESSION['cart']), $max_cart_item_count);
for($i = 0; $i < $curr_cart_item_count; $i++)
....
WHERE `type`= '$id'
$stmt = $conn->stmt_init();
$stmt->prepare("SELECT * FROM `items` WHERE `type` = ?"); // подставляем текст запроса, причем на месте входных параметров ставим специальные маркеры - плейсхолдеры.
$stmt->bind_param("i", $id); // подставляем на место плейсхолдера значение параметра как целочисленный тип
$stmt->execute(); // вот теперь можно выполнить запрос
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
// Обработка результатов
}
select C.Id
from News N
join Categories_Of_News CoN on CoN.News_Id = N.Id
join Category C on C.Id = CoN.Category_Id
where N.Id = :news_id
артикулом/категорией/брендом/названием/ценой
SELECT * FROM `test` WHERE `time` >= (now() - INTERVAL 10 MINUTE);
update `table` set атрибут_не_первичный_ключ = 1
where id in (1, 2, 4, 10);
update table
set id = case
when id = 1 then -1
when id = 2 then -2
when id = 4 then -4
when id = 10 then -10
else id -- страховка от дурака, если неправильно описан in
end
where id in (1, 2, 4, 10)
update table
set id = case
when id = -1 then 2
when id = -2 then 4
when id = -4 then 10
when id = -10 then 1
else id -- страховка от дурака, если неправильно описан in
end
where id in (-1, -2, -4, -10)
UPDATE article SET visits=(visits+1) WHERE id='".$theme_idss."' LIMIT 1
UPDATE article
SET visits=(visits+1),
today = today + 1 -- суточные посещения
WHERE id='".$theme_idss."' -- когда разберетесь, что такое sql-инъекция, то перепишите все запросы, использующие такой стиль подстановки параметров (склеиванием строк)
LIMIT 1 -- после того, как разберетесь, является ли id первичным ключом, можно убрать лимит
ALTER TABLE article
ADD COLUMN today int default 0 AFTER visits
UPDATE article
SET today = 0
select * from t
where t.idProduct = :id_product and t.relatedProduct <> :id_product -- сравнение с <> исключает петлю на собственной вершине
select * from t
where ( (t.idProduct = :id_product and t.relatedProduct <> :id_product) -- сравнение с <> исключает петлю на собственной вершине
or (t.relatedProduct = :id_product and t.idProduct <> :id_product))
select * from
(select r.id as reader_id, r.first_name, r.last_name, b.id book_id, b.name, b.pub_date, row_number() over (partition by r.id order by l.taken_at desc) as rownum
from readers r
left join log_taking l on r.id = l.reader_id
left join books b on b.id = l.book_id
) a
where a.rownum = 1
INSERT into archive (title_product, title_category, price_product)
SELECT p.title, c.title, p.price
from product p
join category c on p.category_id = c.id
-- MySQL
select u.user_id, child_bdays.bday
from user u,
JSON_TABLE(u.children, '$[*]' COLUMNS (
bday VARCHAR(10) PATH '$'
)) child_bdays
where STR_TO_DATE(child_bdays.bday, "%Y-%m-%d") >= DATE(now() - INTERVAL 7 DAY)
and STR_TO_DATE(child_bdays.bday, "%Y-%m-%d") <= DATE(now() + INTERVAL 7 DAY);
-- MariaDB
select u.user_id, JSON_EXTRACT(u.children, concat('$[', idx_table.idx, ']')) as bday
from user u,
(select 0 idx union select 1 union select 2 union
select 3 union select 4 union select 5 union
select 6 union select 7 union select 8 union
select 9 union select 10 union select 11) idx_table /* впомогательная выборка для генерации индексов в диапазоне 0...11 */
where idx_table.idx < json_length(u.children) /* отсекаем обращения к несуществующим индексам элементов в JSON*/
and STR_TO_DATE(JSON_EXTRACT(u.children, concat('$[', idx_table.idx, ']')), "%Y-%m-%d") >= DATE(now() - INTERVAL 7 DAY)
and STR_TO_DATE(JSON_EXTRACT(u.children, concat('$[', idx_table.idx, ']')), "%Y-%m-%d") <= DATE(now() + INTERVAL 7 DAY)