MySQL. 2 способа пересечения множеств и объединения таблиц

Есть следующая структура

36

Нужно составить вот такую таблицу

37

Часть данных у нас в одной таблице, часть данных в другой. Как получить это за один запрос?

1 способ (спасибо Денису Зубову из Самары)

2 способ

На выходе получим

38

Но есть одна проблема – поля с одинаковыми названиями, тогда делаем так…

либо так…

 

Delphi. MySQL. Пишем в DECIMAL поле и читаем из него.

Есть Decimal поле для цены в одном из проектов. Есть на форме 2 spinEdit, рубли и копейки соответственно.

33

Чтение из базы

Получение дробной части из Float(Real)

Получение целой и дробной частей для загрузки на форму

Запись в базу

 

Delphi. Гениальная борьба с WideMemo

Делаю проект на UniGUI. Соответственно, не могу воспользоваться DBGridEh

Имеется поле типа TEXT в MySQL, Delphi определяет его как WideMemo

32

Я просто создал кальк поле и прописал значения туда

 

 

 

MySQL. Удаление записей с истекшим сроком давности

в базе

27

код, пример из проекта, допустим нам нужно удалить записи со сроком давности > 1 минуты

 

Delphi. REST. Декодирование ответа сервера, или превращаем \u0422\u0430\u043A… в нормальный русский текст

Пишу небольшой сервер на REST технологии. Столкнулся с тем, что ответы нужно отправлять на русском языке, а сервер такие ответы превращает в

Задача простая, но не простая. Перепробовал много способов с разных сайтов, итого, вот мой рабочий вариант. Решение опирается на пост одного замечательного программиста, который написал функцию декодирования, которая действительно работает. Continue reading

MySQL. Insert in table with foreign-key

Шпаргалочка. Допустим sessions_id это foreign key другой таблицы. Вот как можно вставить в таблицу с foreign key

 

Delphi. DBTreeView. Простой алгоритм обхода всего дерева и обход всех детей конкретного узла.

Данные алгоритмы не рекурсивны, как возможно стоило бы сделать. Но в компоненте TTreeView есть ряд готовых методов, которыми можно просто пользоваться. В данном случае, мы опираемся на метод GetNext, который дает нам всегда следующий узел, независимо от уровня.

Пусть есть дерево TTreeView. Вот простой способ обойти все дерево.

 

 

Обход самого узла и всех детей конкретного узла

 

Delphi.DBTreeView. Алгоритм динамического обновления узлов

Пусть есть TreeView, связанное с базой данных, например MySQL. Необходимо сделать так, чтобы данные загружались только при первоначальном заполнении (idParent=-1) либо при раскрытии узла (OnExpanding).

Данный алгоритм хорош тем, что не грузит сразу все данные. И если, скажем, дерево большое, содержит много узлов, загрузка которых может занять некоторое время, то он будет очень эффективен в данном случае.

Итак, человеческими словами

Алгоритм

-собрать ID и имена всех детей для определенного родителя

-очистить узел от указателей и детей

-загрузить данные в узел, добавляя в свойство Node.Data ссылку на ID узла в базе. Для большинства задач этого достаточно, если нужно больше данных, можно использовать ссылку на запись или экземпляр класса, если уж все будет совсем масштабно.

-при загрузке проверять, если у какого-то ребенка есть еще дети, добавлять “призрачный” узел, чтобы у TreeView появлялся “плюсик”, при нажатии на который можно производить очередной Expanding Continue reading

Delphi. DBTreeView. Самый эффективный алгоритм удаления узлов из дерева, связанного с базой данных

-пусть есть TreeView, соединенный с базой, скажем MySQL

-пусть мы хотим удалить выделенный узел TreeView из базы данных и из дерева

Алгоритм (пока что №1 в моем рейтинге)

-собрать ID всех детей (рекурсивно), хранящиеся по указателю каждого узла дерева SomeNode.Data

-удалить все записи с этими ID из БД

-удалить указатели всех детей в TreeView обычным обходом всех детей через repeat until

-удалить всех детей из дерева

-удалить указатель удаляемого узла

-удалить сам узел

Вот пример из одной из программ Continue reading