ALTER TABLE test2.board ADD data_razm datatime null AFTER moder;
ALTER TABLE test2.board ADD ip tinytext null AFTER data_razm;update test2.board t2b, test.board tb
set t2b.data_razm = tb.data_razm,
t2b.ip = tb.ip
where t2b.id = tb.idvar my_array =
[
{
data: 123
},
{
data: 845
},
{
data: 'dsdsd'
}
];
my_array.forEach(function(item, i, arr)
{
switch(i)
{
case 0:
item.operation = item.data * 5;
break;
case 1:
item.operation = item.data * 2;
break;
default:
item.operation = item.data + 'qwqwqw';
}
});$arraytime = ['07:01:05', '06:21:30', '08:15:15', '07:13:08', '06:02:00', '09:21:10', '12:54:48'];
$sum = 0;
foreach($arraytime as $time)
$sum += strtotime($time) - strtotime('00:00:00');
echo sprintf('%d:', $sum / 3600).date('i:s', $sum); select last_move.book_id, last_move.rack_id, last_move.board_id, -- последнее местонахождение книги
first_move.date_from, -- дата первого появления на складе
last_move.date_to -- дата последнего перемещения
from
-- подзапрос, получаем первые записи появления каждой книги на складе
(select *
from (select t.*, rank() over (partition by t.book_id order by t.date_from) rnk
from table t)
where rnk = 1) first_move
join
-- подзапрос, получаем последние записи перемещения каждой книги на складе
(select *
from (select t.*, rank() over (partition by t.book_id order by t.date_from DESC) rnk
from table t)
where rnk = 1) last_move
-- сопоставляем записи
on first_move.book_id = last_move.book_id $sql = "insert into table_name(name) value('".$str_param."')";$sql = "insert into table_name(name) value(:param1)"; //текст запроса с метками для вставки параметров;
$prep_sql = $sqlconnect->prepare($sql); //подготовка SQL-запроса, фактически, синтаксический разбор и выявление меток, куда вставлять параметры, проверка ошибок;
$prep_sql->bindParam('param1', $str_param, STRING_TYPE); //связываем параметры с метками в запросе, проверяем тип входного параметра;
$prep_sql->execute(); //выполняем запросSELECT t.event_date, -- атрибут таблицы типа datetime, для которого определяем интервал, выведен для того, чтобы наблюдать за процессом отладки
case -- SQL-конструкция вида "case when ... then ... else ... end", с помощью которой можно выводить не только конкретное значение атрибута, но и задавать условие, при котором конечное значение результата будет вычисляться по-разному в пределах одной выбранной записи.
when TIME_TO_SEC(t.event_date) >= inter.begin AND TIME_TO_SEC(t.event_date) <= inter.end -- если t.event_date, выраженное в суточных секундах, находится в отрезке [inter.begin, inter.end], также выраженных в суточных секундах,...
then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width) -- ... то вычисляем количество полных интервалов
else null -- иначе, если время не попадает в период отслеживания, то выводим "пусто", чтобы явно указать, что значение не находится в интересуемом периоде
end as full_interval_number -- кол-во прошедших полных интервалов, начинается с 0
FROM table t, -- ваша таблица
(select TIME_TO_SEC('09:00:00') as begin, -- начало дневного периода
TIME_TO_SEC('18:00:00') as end, -- конец дневного периода
TIME_TO_SEC('00:15:00') as width -- ширина интервала
) inter -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке order by case
when :order_param = 1 then col_1
when :order_param = 2 then col_2
end,
case
when :order_param = 1 then col_2
when :order_param = 2 then col_1
endSELECT *
from (SELECT servers.id,
servers.game,
servers.votes,
@n := @n + 1 AS rank
FROM servers, (SELECT @n := 0) r
ORDER BY servers.votes DESC) a
where id = 3 /*Функция преобразования выборки в матрицу */
function get_matrix($rows)
{
// получаем все значения по id - измерению матрицы (строки матрицы)
// можно сделать запросом select distinct id from table order by id
foreach($rows as $row)
$id_dem[$row['id']] = 1;
// получаем все значения по date - измерению матрицы (столбцы матрицы)
// можно сделать запросом select distinct date from table order by date
foreach($rows as $row)
$date_dem[$row['date']] = 1;
$map = null; // если нет значений размерности матрицы, то функция вернет null
// получаем карту не-null значений - непустые ячейки матрицы
foreach($rows as $row)
$map[$row['id']][$row['date']] = $row['count'];
// дополняем карту null значениями - получаем полноценную матрицу
if(isset($id_dem) && isset($date_dem))
foreach($id_dem as $id => $val_id)
foreach($date_dem as $date => $val_date)
$map[$id][$date] = array_key_exists($id, $map) && array_key_exists($date, $map[$id])
? $map[$id][$date] : null;
return $map;
} select u.user_id, w.wallet_id, wa.value as address
from users u
join wallet_address wa on wa.user_id = u.user_id
join wallets w on w.wallet_id = wa.wallet_id
where wa.value is not null<style>
#div1
{
display: block;
width: 400px;
height: 1400px;
background-color: green;
}
#div2
{
display: block;
width: 400px;
height: 400px;
background-color: red;
}
</style>
<div id="div1">
</div>
<div id="div2">
</div>
<script>
//Функция для определения необходимости выполнения действия,
//связанное с появлением элемента elem_id в видимой части документа
function SomethingToDoElem(e, elem_id)
{
var elem = document.getElementById(elem_id);
if(elem === null)
return;
//определение размера видимой части документа без JQuery
var opera = (navigator.userAgent.toLowerCase().indexOf('opera') > -1),
html = document.documentElement,
body = document.body,
w = document.compatMode=='CSS1Compat' && !opera ? html.clientWidth : body.clientWidth,
h = document.compatMode=='CSS1Compat' && !opera ? html.clientHeight : body.clientHeight;
// если величина прокрутки по вертикали + видимая высота документа
//превышает расстояние от верха документа до элемента,
// для которого требуется действие доскроллинга, то выполняем это действие
if(e.currentTarget.scrollY + h > elem.offsetTop)
{
var is_did_something = elem.getAttribute('is_did_something'); // если действие однократного применения,
//то получаем данные о том, что оно не выполнялось ранее, например, с помощью атрибута тега.
if(is_did_something === null) // атрибут не создан, значит действия не было
{
setTimeout(function(){elem.style.backgroundColor = 'blue'; }, 1000); // выполняем действие
elem.setAttribute('is_did_something', 1); // записываем, что действие выполнили
// для проверки однократности его выполнения
}
}
}
// Ловим события, для которых возможно понадобиться действие доскроллинга
// на загрузку документа, лучше использовать JQuery аналог
window.onload = function(e)
{
SomethingToDoElem(e, "div2");
}
// на прокрутку документа
window.onscroll = function(e)
{
SomethingToDoElem(e, "div2");
}
// на изменение размера окна документа, если дизайн резиновый
// и интересуемый элемент div2 может изменять в этом случае свое положение
// при ресайзе окна браузера.
// !!!: лучше не привязывать через $().on('resize', ...) криво срабатывает вызов,
// использовать только нативные способы подписки на событие.
window.onresize = function(e)
{
SomethingToDoElem(e, "div2");
}
// Также нужно вызывать SomethingToDoElem(e, "div2"); при любом динамическом изменении
// контента страницы или блока, где этот контент расположен.
</script>