select id, name from testtable where trim(replace(Name, char(9), ' ')) like 'S%n';
select id, name from testtable where trim(replace(Name, char(9), ' ')) like '%n';
SELECT distinct P.date
FROM Query Q
JOIN Position P ON Q.id = P.query_id
where P.Date between _ and _
SELECT Q.Query,
QP1.Cnt,
QP2.Cnt,
......
FROM Query Q JOIN Position P ON Q.id = P.query_id
left join (select Q1.Query, P1.Date, count(*) as Cnt from Query Q1 JOIN Position P1 ON Q1.id = P1.query_id group by Q1.Query, P1.Date) QP1 on QP1.Query = Q.uery and P1.Date = P.Date
left join (select Q2.Query, P2.Date, count(*) as Cnt from Query Q2 JOIN Position P2 ON Q2.id = P2.query_id group by Q2.Query, P2.Date) QP2 on QP2.Query = Q.Query and P1.Date = P.Date
....
where P.Date between _ and _
and (QP1.Cnt > 0 or QP1.Query is null)
and (QP2.Cnt > 0 or QP2.Query is null)
....
$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
CREATE TABLE Orders (
...
Product_Id int,
FOREIGN KEY (Product_Id) REFERENCES Products(Product_Id) -- внешний ключ к продуктам
...
-- Таблица "Позиция продукта в заказе"
CREATE TABLE Order_Positions (
position_id INT PRIMARY KEY,
order_id INT,
product_id INT,
FOREIGN KEY (Product_Id) REFERENCES Products(Product_Id), -- внешний ключ к продуктам
FOREIGN KEY (order_id) REFERENCES Orders(order_id) -- внешний ключ к Заказам
);
select A.*
from (SELECT Pss.session_id, Pss.peak,
row_number() over (partition by Ps.id order by Pss.peak desc) rnm -- нумеруем оконной функцией выборку в пределах каждого Ps.id по нужной сортировке
FROM peak_sessions_sets Pss
JOIN peak_sessions Ps ON Pss.session_id = Ps.id
WHERE Ps.user_id = 1
) A
where A.rnm = 1 -- извлекаем по 1 записи
order by A.Peak Desc -- если надо, то еще как-то сортируем итог
таблица1 join таблица2 using (общие_имена_полей)
таблица1 join таблица2 on таблица1.общее_имя_поле = таблица2.общее_имя_поле...
select b.*, -- все колонки по книге
a.* -- все колонки по сведениям об авторе
from books as b
join book_autor as ba on b.book_id = ba.book_id -- если у книги может не быть авторов, то нужен left join
join autors as a on ba.autor_id = a.autor_id -- если у книги может не быть авторов, то нужен left join
where b.book_id = :book_id -- сюда подставляем параметр нужной книги.
select t1.*, -- тематики
t2.* -- вопросы
from table_1 t1
join table_1 t2 on t2.topic = t1.id
where t1.topic is null
and t1.Name like 'Тематика%' -- не хватает атрибута type, чтобы различать раздел от тематики
with date_list as (/*Любым способом получаете непрерывный список дат интересуемого диапазона */)
select A.date, u.user_id, nvl(A.max_score, 0) max_score /* nvl зависит от СУБД */
from (select dl.date, u.user_id, tb_max_score.max_score,
rank() over (partition by dl.date order by random() /*реализация функции random зависит от СУБД*/ ) rnk
from (select us.date_submitted, max(us.scope) max_score
from user_score us) tb_max_score -- выясняем макс-ные баллы
left join date_list dl on dl.date = tb_max_score.date_submitted
left join user_score us on dl.date = us.date_submitted -- выясняем, у кого макс-ные баллы
and us.score = tb_max_score.max_score
) A
cross join user u u.user_id = A.user_id -- прицепляем тех, кто возможно не участвует в рейтинге
where A.rnk = 1
(product_)id, (product_)name, (photo_)id, (photo_)url
1, 'Товар 1', 1, 'example.png'
1, 'Товар 1', 2, 'example2.png'
select
ar.id,
ar.name,
ar.date,
ar.text,
ap.property_id,
p.name as property_name, --поскольку у вас есть в базе реализовано универсальное хранение свойств, то почему бы не вывести имя свойства из справочника?
ap.value as property_value
from articles as ar
left join articles_property as ap on ap.article_id = ar.id
and ap.property_id in (/* перечисляем все необходимые свойства */)
left join property as p on ap.property_id = p.id -- справочник названий свойств
select
ar.id,
ar.name,
ar.date,
ar.text,
(select value
from articles_property as ap
where ap.article_id = ar.id
and ap.property_id = 10) as author
from articles as ar
<?php
// считаем, что данные пришли по POST-у
if(isset($_POST['submit'])) // проверяем, что приехали данные формы по submit, в кнопке сабмита атрибут name должен иметь значение submit
{
$inserted_user_count = 0;
if(isset($_POST['selected_users'])) // присутствуют отмеченные пользователи
{
$pdo = new PDO(параметры подключения к базе);
foreach($_POST['selected_users'] as $selected_user_id)
{
$stmt = $pdo->prepare('insert into ваша таблица (атрибуты таблицы) values (значения атрибутов таблицы, кроме user_id, :user_id)');
$stmt->bindParam(':user_id', $selected_user_id, PDO::PARAM_INT);
// еще байндим какие-то параметры у запроса, если есть плейсхолдеры, кроме :user_id.
$stmt->execute(); // наконец, выполняем запрос
$pdo->commit(); // фиксируем изменения в базе данных, если у вас соединение открыто не в режиме автокамита
$inserted_user_count++;
}
$pdo = null; // закрываем соединение с базой
}
echo 'Обработано пользователей: '.$inserted_user_count;
}
?>
select '10' Name union
select '1' Name union
select '20' Name union
select '2' Name
order by length(Name), Name