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
select A.*
from (select t.col1, t.col2, ..., t.colN from t -- выборка для "не по умолчанию"
union all
select def_col1, def_col2, ... def_colN from dual -- строка значений по умолчанию
) A
where rownum = 1 -- выбираем только первую строку, неважно из чего
SELECT id,
CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END as service_class, price
FROM tickets
where CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END is not null
SELECT id,
CASE
WHEN price > 10000 AND price < 11000 THEN 'Economy'
WHEN price >= 20000 AND price <= 30000 THEN 'PremiumEconomy'
WHEN price > 100000 THEN 'Business'
END as service_class, price
FROM tickets
where (price > 10000 AND price < 11000) -- 'Economy'
or (price >= 20000 AND price <= 30000) -- 'PremiumEconomy'
or (price > 100000) -- 'Business'
select *
from verbs
order by darg-w
select *
from verbs
order by id
select *
from verbs
order by position -- дополнительное поле, в которое будете сами или программно вбивать порядок сортировки
select *
from verbs
order by case when id = 100 then 0 else 1 end -- даем записи id=100 наивысший приоритет, в любом состоянии списка она будет на 1 месте!
, id -- остальные записи отсортируются в порядке добавления
FROM views v JOIN memes m JOIN comments c
FROM views v, memes m, comments c
SELECT (select COUNT(v.id) from views v where v.user_id = u.user_id ) AS просмотры,
(select COUNT(DISTINCT v.meme_id) from views v where v.user_id = u.user_id) AS [уникальные просмотры],
(select COUNT(m.id) from memes m where m.user_id = u.user_id) AS [выложено мемов],
(select COUNT(c.id) from comments c where c.user_id = u.user_id) AS [написано комментариев]
FROM users u -- лучше связаться с таблицей users
WHERE u.user_id = 1