- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
INSERT INTO `modules`
VALUES (
'', 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, (
SELECT max( `order` )
FROM `modules`
WHERE `root` =5
), 'Y'
)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−857
INSERT INTO `modules`
VALUES (
'', 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, (
SELECT max( `order` )
FROM `modules`
WHERE `root` =5
), 'Y'
)
#1093 - You can't specify target table 'modules' for update in FROM clause
−855
declare @ДеньНедели int
set @ДеньНедели = 1
while @ДеньНедели <= 7
begin
if @ДеньНедели = 1
begin
update #TTT set Пн = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 2
begin
update #TTT set Вт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 3
begin
update #TTT set Ср = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 4
begin
update #TTT set Чт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 5
begin
update #TTT set Пт = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 6
begin
update #TTT set Сб = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
if @ДеньНедели = 7
begin
update #TTT set Вс = @Сумма where Поставщик = @Поставщик and datepart(dw,Дата) = @ДеньНедели
end
set @ДеньНедели = @ДеньНедели + 1
end
Интересный разбор дня недели, цикл проходим 7 раз, с заходом в каждый if 1 раз
−143
if exists(
select 1
from PList
where userId = @userId
and opCode = 'SSDD'
)
begin
select @SSDD = ssValue
from PList
where userId = @userId
and opCode = 'SSDD'
.................
<some code>
.................
end
оптимальненько
−858
FUNCTION get_yesterday
RETURN DATE
AS
dd VARCHAR2 (2);
mm VARCHAR2 (2);
yy VARCHAR2 (4);
BEGIN
SELECT TO_CHAR (SYSDATE - 1, 'yyyy')
INTO yy
FROM DUAL;
END get_yesterday;
Вычисляем вчерашнюю дату на PL/SQL
−860
SELECT
node.nid AS nid,
location.latitude AS location_latitude,
location.longitude AS location_longitude,
node.title AS node_title,
node.language AS node_language,
location.lid AS location_lid,
(IFNULL(ACOS(0.501284223863*COS(RADIANS(location.latitude))*(0.863228195442*COS(RADIANS(location.longitude)) + 0.504813908876*SIN(RADIANS(location.longitude))) + 0.865282686124*SIN(RADIANS(location.latitude))), 0.00000)*6362105.74365) AS location_distance,
node_data_field_rate_prior.field_rate_prior_amount AS node_data_field_rate_prior_field_rate_prior_amount,
node_data_field_rate_prior.field_rate_prior_currency AS node_data_field_rate_prior_field_rate_prior_currency,
node.type AS node_type, node.vid AS node_vid,
node_data_field_rate_prior.field_rate_reg_amount AS node_data_field_rate_prior_field_rate_reg_amount,
node_data_field_rate_prior.field_rate_reg_currency AS node_data_field_rate_prior_field_rate_reg_currency,
node_data_field_rate_prior.field_rate_vip_amount AS node_data_field_rate_prior_field_rate_vip_amount,
node_data_field_rate_prior.field_rate_vip_currency AS node_data_field_rate_prior_field_rate_vip_currency
FROM node node
LEFT JOIN location_instance location_instance ON node.vid = location_instance.vid
LEFT JOIN location location ON location_instance.lid = location.lid
LEFT JOIN content_type_dta_kiosk node_data_field_rate_prior ON node.vid = node_data_field_rate_prior.vid
WHERE node.type in ('dta_kiosk')
AND (location.latitude > 40.9991009563
AND location.latitude < 59.0008990437
AND location.longitude > 5.91311892539
AND location.longitude < 34.0868810746
)
ORDER BY location_distance ASC
−859
"SELECT c.type AS type,
ELT(c.type, g.genre_id, l.label_id, f.film_id, a.actor_id, s.show_id, ch.channel_id,aw.award_id) AS id,
ELT(c.type, g.value, l.value, f.real_name, a.real_name, s.real_name, ch.name, aw.description) AS real_name,
ELT(c.type, NULL, NULL, f.name, a.name, s.name, NULL, NULL) AS name
FROM connector AS c
LEFT JOIN genres AS g ON (c.second = g.genre_id)
LEFT JOIN labels AS l ON (c.second = l.label_id)
LEFT JOIN films AS f ON (c.second = f.film_id)
LEFT JOIN actors AS a ON (c.second = a.actor_id)
LEFT JOIN shows AS s ON (c.second = s.show_id)
LEFT JOIN channels AS ch ON (c.second = ch.channel_id)
LEFT JOIN awards AS aw ON (c.second = aw.award_id)
WHERE c.first = ".$_SESSION['user_id']
Вот как это делается!
−853
billats=# select * from t_month_names order by m_begin desc limit 10;
month | m_begin | m_end
-------------+------------+------------
Декабрь 04 | 2004-12-01 | 2004-12-31
Ноябрь 04 | 2004-11-01 | 2004-11-30
Октябрь 04 | 2004-10-01 | 2004-10-31
Сентябрь 04 | 2004-09-01 | 2004-09-30
Август 04 | 2004-08-01 | 2004-08-31
Июль 04 | 2004-07-01 | 2004-07-31
Июнь 04 | 2004-06-01 | 2004-06-30
Май 04 | 2004-05-01 | 2004-05-31
Апрель 04 | 2004-04-01 | 2004-04-30
Март 04 | 2004-03-01 | 2004-03-31
это не шутка.
−858
billats=# select * from lists limit 40;
type_ | name | value
-------+--------------------+----------------------
102 | debt_list_progress | 0
102 | debt_size | 0
5 | 0 | Тюменьпрофбанк
10 | 1 | Физ. лицо
10 | 2 | Юр. лицо
10 | 3 | Бюджет. орг.
11 | 0 | Все группы
11 | 1 | Приход. ордер
11 | 3 | Расч. счет
11 | 4 | Касса
11 | 6 | Взаимозачеты
20 | 1 | Установка
20 | 2 | Ремонт
20 | 3 | Задание
20 | 4 | Сообщение
20 | 5 | Авария
21 | 1 | Ген.директор
21 | 12 | Дежурный оператор
21 | 3 | Гл.бухгалтер
21 | 5 | Нач. абон.отдела
21 | 6 | Линейщик
21 | 7 | Инженер АТС
21 | 9 | Кассир
22 | boss | 1
22 | irina | 3
22 | serg | 100
22 | tanya | 9
22 | ugin | 100
23 | 001 | сегодня
23 | 002 | завтра
23 | 003 | послезавтра
23 | 010 | на этой неделе
23 | 011 | 1 неделя
23 | 012 | 2 недели
23 | 020 | в этом месяце
23 | 021 | 1 месяц
23 | 022 | 2 месяца
25 | ugin | [email protected]
30 | 103 | Прямая линия
30 | 110 | 2-х мегабитный канал
Все есть объект.
−861
CREATE FUNCTION "insert_payment" (integer) RETURNS integer AS '
DECLARE
l_payment integer;
BEGIN
INSERT INTO payments (client,type_,pdate,number_)
VALUES ($1,4,current_date,nextval_(''payments_number_1_seq''));
SELECT INTO l_payment last_value FROM payments_id_seq;
RETURN l_payment;
END;' LANGUAGE 'plpgsql';
Функция должна вставлять платеж и возвращать его id.
Под нагрузкой конечно же 8 строка возвращает нен тот id. (когда несколько параллельных транзакций успевают сделать вставку.)
Что интересно - возвращаемый функцией id используется другой хранимкой для проставления суммы платежа. И это пости всегда работает :)
Перл от "отцов основателей".
−183
$sql = "DELETE FROM ".PREFIX."_orders
WHERE id = '".$order_id."'
ORDER BY order_date DESC";