SELECT c.id, c.region,
(select count(*)
from `class_item` c2
where c.data <= c2.data-- знак будет влиять на направление нумерации
) as row_num
FROM `class_item` c
order by с.data desc
SELECT * FROM `products`
LEFT JOIN (SELECT `product`, `price`,
row_number() over (partition by `product` order by `id` desc) as price_rank
from `prices`) as prc on `products`.`id` = prc.`product`
and prc.price_rank = 1
limit 10
SELECT * FROM `products`
LEFT JOIN (SELECT `product`, `price`,
IF(@prev_id <> `product`, @p_rank := 0, @p_rank),
@prev_id := `product`,
@p_rank := @p_rank + 1 as price_rank -- определяем partition
from `prices`,
(SELECT @p_rank := 0) p_rank, -- начальное значение ранга
(SELECT @prev_id := -1) prev_id -- начальное значение товара (не должен быть в диапазоне сущ. id)
order by `product` asc,
`id` desc -- устанавливаем сортировку partition
) as prc on `products`.`id` = prc.`product`
and prc.price_rank = 1
limit 10
SELECT images.name,
GROUP_CONCAT(tags.tagname SEPARATOR ", ") AS tagname,
category.title,
a.category_tagname
FROM images
INNER JOIN images_tags ON images.id = images_tags.images_id
INNER JOIN tags ON images_tags.tags_id = tags.id
INNER JOIN category ON images.category_id = category.category_id
---------------------
join (SELECT category.category_id,
GROUP_CONCAT(tags.tagname SEPARATOR ", ") AS category_tagname
FROM images
INNER JOIN images_tags ON images.id = images_tags.images_id
INNER JOIN tags ON images_tags.tags_id = tags.id
INNER JOIN category ON images.category_id = category.category_id
GROUP BY category.category_id
) a on a.category_id = images.category_id
----------------------
WHERE images.category_id = 1
GROUP BY images.name, category.title, a.category_tagname
Или взять полученный массив $arrTable вытащить оттуда $arrTable[tagname], пересобрать, почистить от дубликатов и выводить уже его?
select u.*
from users u
where not exists(
select 999
from user_statuses us
where us.user_id = u.id
and us.status_id = 1
)
$this->db->select('инструктор, дата, SUM(длительность)');
$this->db->from('( SELECT DISTINCT инструктор, дата, начало, длительность
FROM таблица ) AS алиас');
$this->db->group_by(['инструктор', 'дата']);
$query = $this->db->get();
SELECT *
FROM table1 t1
RIGHT JOIN table2 t2
ON t1.ID = t2.ID;
SELECT t1.*, t2.*
FROM table1 t1
RIGHT JOIN table2 t2
ON t1.ID = t2.ID;
SELECT a.*, ai.name_img_file, ai.src, ai.title as img_title
FROM adverts as a
join advert_imgs as ai on a.id = ai.id_adv
WHERE 1 = 1
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'storey_apartament' AND af.field_value = '58')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'condition_house' AND af.field_value = '13')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'Sleeping'AND af.field_value = '38')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'Availability' AND af.field_value = '48')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'Bathroom' AND af.field_value = '77')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'Heating'AND af.field_value = '26')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'Furnished' AND af.field_value = '14')
AND exists( select 1 from adverts_fields af where a.id = af.id_advert and af.field_name = 'kitchen_area' AND af.field_value = '34')
ORDER BY `title` DESC
update table_name
set value = replace(value, char(код символа ¶), concat(char(код символа \r), char(код символа\n)))
select value,
replace(value, char(код символа ¶), concat(char(код символа \r), char(код символа\n))) as new_value
from table_name
$sql = "select ...
from ...
where 1 = 1
".(isset($_POST['status']) ? ' and medialib.status LIKE '.$_POST['status'] // тут сшили текст запроса и значение параметра (эти два слова нужно подчеркнуть)
: "")
$bind_params = [];
if(isset($_POST['status']))
$bind_params['status'] = $_POST['status'];
$sql = "select ...
from ...
where 1 = 1
".(isset($bind_params['status']) ? " and medialib.status LIKE :status " // тут сшили текст запроса со специальным маркером (может использоваться знак ? )
: "")
foreach($bind_params as $bind_param)
{
// тут привязываем каждое значение параметра с маркером в запросе через функцию bind_param (интерфейс и название функции зависит от библиотеки для соединения с базой данных)
}
<a href="?id=1">см. запись</a>
if(isset($_GET['id']))
{
// тут код или вызов функции для работы с одной записью
}
else
{
// тут код или вызов функции для вывода всего списка
}
msqli_prepare("текст запроса ... where id = ?"); // ставим в нужное место запроса параметрические метки
msqli_bind_param("i", $_GET["id"]); // передаем параметр на место меток-вопросов, в каком порядке они идут
msqi_execute();
// msqli_fetch функция и форматированный вывод сведений
// тут опущены действия связанные с формированием запроса,
// на этом этапе вы каким-то способом получили выборку данных из таблицы 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 */