Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Инкрементное поле или хранить в поле? (Андрей) 21/04/2009 - 13:36:26
      Re: Инкрементное поле или хранить в поле? (walrus) 21/04/2009 - 15:16:56
      Re: Проблема с BLOB-полем (Pest) 23/04/2009 - 16:14:44

> Original message text:
> From: Андрей - 21/04/2009 - 13:36:26
> Subject:Инкрементное поле или хранить в поле?
> -----------------
> Если у вас есть две связанные таблицы - one-many. И при выборе вам нужно знать количество связанных записей. Как вы делаете?
> Вариант 1)
> select blog.*,(select count(*) from post where post.blog_id = blog.id) as post_count from blog
> Таким образом мы получаем все блоги + количество записей в каждом из них.Такой вариант плох тем, что если блогов будет много, он будет тормозить.
> Вариант 2)
> Добавляем blog.post_count default 0;
> При добавлении поста, удалении соответственно меняем поле на +1,-1. Лучше тем что быстрее, но сразу и минус - нужно вручную изменять новое поле.
> Вот меня и интересует, кто что использует? Возможно есть разработчики highload систем, мне интересно ваше мнение.
>


From: Pest - 23/04/2009 - 16:14:44
Subject:Проблема с BLOB-полем
-----------------
Проблема с BLOB-полем

среда - [CodeGear™ Delphi® 2007 for Win32®]
сервер БД - [MySQL 5.0]
компонент -[ZeosBD]


fs:=TFileStream.Create(fn,fmOpenRead);
// читаем некие параметры из fs...

msNeuro := TMemoryStream.Create;
msNeuro.Position := 0;

col := NeuroSz * sizeof(smallint); // NeuroSz - ожидаемое число записей размером в SmallInt
msNeuro.CopyFrom(fs, col); // fs-TFileStream, Position стоит на верном месте.

msNeuro.SaveToFile(ExtractFilePath(Application.ExeName) + '.tmp_write'); // проверка считанного!
// msNeuro - действительно содержит 300 * 2 байт, совпадающие с считанным содержимым fs

// а теперь BLOB запишем
DataSet.SQL.Clear;
DataSet.SQL.Add('select * from `events` where Id_event=(select MAX(Id_event) from `events`)');
DataSet.Open;
// ссылаемся на последнюю запись в таблице `events`
if not (DataSet.State in [dsInsert, dsEdit]) then DataSet.Edit;
try
TBlobField(DataSet.FieldByName('NeuroBlob')).LoadFromStream(msNeuro); // Собственно загузка msNeuro в BLOB -поле
finally
msNeuro.Free;
end;
Dataset.Post;



BLOB заполняется!
НО если записывали 600 байт, то при чтении BLOB я вижу 768 байт!
читаю и через чтение BLOB msNeuro и через вьювер (mySQL-Front)
При чем первые 4 байта совпадают с оригиналом, а остальное отличчается... иногда есть совпадения... но не чаще 50%


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
35462



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |