• 51490
  • 107
  • 12
Нравится блог?
Подписывайтесь!

SQL заметки

Сохраню разные интересные моменты касательно работы с SQL

# Error #1467 - Failed to read auto-increment value from storage engine

Случилась такая зараза, что в таблицу, где было 115 записей надо было вставить данные из другой таблицы (31 запись). И INSERT...SELECT постоянно матерился ошибкой. В итоге надо было указать откуда начать инкремент, видимо. Короче, вставка случилась вот таким образом

  1. ALTER TABLE questions AUTO_INCREMENT = 116;
  2. INSERT INTO questions (id,category, question, subcat)
  3. SELECT NULL, 6, docs.docname, "Документация" FROM docs
 

# предпоследняя запись

блин легко же, но пару часов убил. как достать предпоследнюю запись выборки?

...

ORDER BY id DESC
LIMIT 1,1

в обратно отсортированном массиве взять одну строчку начиная со 2й ))) сработало в подзапросе.

 

# Значение из какого-то из нескольких полей

Предположим, есть 3 поля, в которых заполнено в строке только одно из них. Лучше ведь вывести их склеив столбцы в один. Тогда

  1. SELECT IFNULL(поле_1,
  2. (SELECT IFNULL(поле_2,
  3. (SELECT IFNULL(поле_3,
  4. '')))))
  5. FROM some_table
  6. WHERE some_id=45

не одно так другое поле, не другое так третье ) что-то из них даст результат либо пустую строчку.

 

# Взять значения из таблицы по значению (параметру) из той же таблицы

Пример такой: все подразделения находятся в одной таблице, где имеют параметр 'parent' - к чему относятся. В общем, таблица зациклена сама на себя. И надо было вытащить подразделения и к кому они относится.

таблица выглядела

id | nameshort | parent

  1. SELECT dep.nameshort, de.nameshort
  2. FROM psu_compark.department dep, psu_compark.department de
  3. WHERE de.parent = dep.id

т.е. к таблице обращаемся дважды как к разным.

# разница недель, учитывая год
Случилась нужда в вычислении разницы недель между 2мя периодами (даты).

Тут бы


  1. SELECT (WEEK(c.PERIODEND,1) - week(c.PERIODBEG,1)

но проблема в том, что год может быть либо этот же, либо следующий. Например,

"2014-02-02" - "2013-12-02" = 5 - 49 = -44, когда должно быть 9 недель. Решил подправить это, дописывая разницу, равную количеству недель в году. Т.е. если год тотже, то разница даст 0 и произведение на количество недель также даст 0, а значит ничего не добавится. Если года разные, то будет прибавляться количество недель в году * 1. ($year подставляю в PHP, тут будет 2013)


  1. SELECT(WEEK(c.PERIODEND,1) - week(c.PERIODBEG,1) + (WEEK('".$year."-12-31')*( YEAR(c.PERIODEND) - YEAR(c.PERIODBEG) ) ))

чую есть стандартное SQL решение, но не придумал.

Руслан Fors fors
... и тем не менее я не идеален.
15 февраля 2013, 22:37
671

Загрузка...
Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Нет ничего более вдохновляющего, чем видеть стада сайгаков. Не зря их называют «киелі»

Нет ничего более вдохновляющего, чем видеть стада сайгаков. Не зря их называют «киелі»

В начале 2000-х годов в уральской популяции оставалось только 2500 сайгаков. Сейчас благодаря охране от браконьеров их численность выросла до 100 тысяч.
theYakov
17 июля 2017 / 17:55
  • 8785
  • 3
Ресторанный консенсус в Казахстане: мужчина платит всегда

Ресторанный консенсус в Казахстане: мужчина платит всегда

Ресторанный консенсус в этой стране таков, что если речь идет именно о свидании, то оплачивает его на 100% из 100 именно мужчина. Пытаться его расшатать - это достаточно дорогое удовольствие.
convoluted
17 июля 2017 / 15:32
Решили рискнуть и обратиться к риэлторам. И этим людям мы доверяем свой ночлег?

Решили рискнуть и обратиться к риэлторам. И этим людям мы доверяем свой ночлег?

Звоним риэлтору, говорим, верните наши 15 000 тг, так как ваша клиентка нас кинула. По его словам, он вернуть деньги больше не может. Не имеет право.
decorus
17 июля 2017 / 14:48
  • 3130
  • 15
Польша – страна простых решений. Почему они смогли, а мы еще нет?

Польша – страна простых решений. Почему они смогли, а мы еще нет?

В Польше вообще очень много понятного и простого – инфраструктура, коммуникации и дороги прежде всего, льготы в образовании, поляки вообще получают его бесплатно. А урожай побольше нашего.
Shimanskaya
17 июля 2017 / 16:08
  • 3287
  • 37
«Алматы – город, летящий под откос», или Кто заказал утку у российского блогера

«Алматы – город, летящий под откос», или Кто заказал утку у российского блогера

Некий блогер Сергей Никитский неустанно пишет о Казахстане, Астане, Экспо и посвящает два материала Алматы, причём подчёркнуто называет город Алма-Ата.
Langdon
19 июля 2017 / 15:44
  • 3131
  • 51
Один из способов выиграть суд против коллекторов

Один из способов выиграть суд против коллекторов

Сегодня в своем посте я постараюсь рассказать, как выиграть суд против некоторых коллекторских компании в нашей стране. Чем отличается коллекторское агенство от обычного банка?
Advokot
18 июля 2017 / 15:31
  • 2835
  • 9
«Язык мой – враг мой», или 7 причин никогда не разговаривать с полицией

«Язык мой – враг мой», или 7 причин никогда не разговаривать с полицией

На этот раз пост очень важный и необходим к прочтению каждым! Не поленитесь и уделите время прочтению. Ни в коем случае, не разговаривайте с полицейскими до прихода вашего адвоката!
asselsabekova
18 июля 2017 / 14:19
  • 2901
  • 31
Книга, которая сэкономит вам 150 тысяч долларов и два года жизни

Книга, которая сэкономит вам 150 тысяч долларов и два года жизни

Автор утверждает, что программы МБА не дают никакого позитивного выхлопа, если ты уже не являешься владельцем или наследником прибыльного бизнеса. Знания МБА можно получить бесплатно, уверяет он.
Aks_Ras
19 июля 2017 / 16:28
  • 2379
  • 2
Госорганы, ответственные за жизни детей, хранят молчание. У них в отчетах все хорошо

Госорганы, ответственные за жизни детей, хранят молчание. У них в отчетах все хорошо

Вчера все информационные агентства страны передали сообщение, которое заставило забиться в ужасе сердца всех матерей страны. В мусорном контейнере города Сатпаев было обнаружено тело новорожденной девочки.
AliyaSadyrbaeva
19 июля 2017 / 11:06
  • 2170
  • 18