Специалисты в области MySQL + MQ4

[Удален]  

В данный момент разрабатываю эксперта который собирает информацию о ДЦ, котируемых валютах, все параметры валютной пары, пишет тиковую, минутную и т.д. историю в базу.

Область применения довольно широкая такой базы данных.


Но сталкнулся с такой проблемой, непонимаю как в MySQL объединить ячейки 2-х разных таблиц.


Изначально не хочу засорять базу данных разным лишним хламом. Например.

1. Есть таблица, куда пишутся ДЦ поставляющие котировки

2. Есть таблица валютных пар

3. Есть таблицы по отдельности, тиковая, минутная и т.д. в нее пишутся данные.


Берем например таблицу с тиками:

Таблицы в MySQL:

1.Таблица с тиками.

CREATE TABLE IF NOT EXISTS `History_Tick` (
  `ID` int(11) NOT NULL auto_increment,
  `Symbol` varchar(6) NOT NULL,
  `TimeCurrent` datetime NOT NULL,
  `Ask` double NOT NULL,
  `Bid` double NOT NULL,
  `AccountCompany` varchar(255) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;

2. Таблица с ДЦ.

CREATE TABLE IF NOT EXISTS `AccountCompany` (
  `ID` int(11) NOT NULL auto_increment,
  `AccountCompany` varchar(255) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

3. Таблица с инструментами.

CREATE TABLE IF NOT EXISTS `Symbols` (
  `ID` int(11) NOT NULL auto_increment,
  `Symbol` varchar(6) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

Перез записью в таблицу с тиками в эксперте на MQL формируется строка вида:

   query = StringConcatenate("insert into History_Tick (Symbol,TimeCurrent,Ask,Bid,AccountCompany) values(\"",
                             Symbol(),"\",\"",
                             TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS),"\",\"",
                             NormalizeDouble(Ask, Digits),"\",\"",
                             NormalizeDouble(Bid, Digits),"\",\"",
                             AccountCompany(),"\");");


Подскажите как объединить 3 эти таблицы, что-бы вместо Symbol() записывался ID из таблицы инструментов, вместо AccountCompany() записывался соответствующий ID из таблицы с ДЦ.

 

лично не сталкивался плотно с МуСКЛом, но вот допустим в оракле есть такая вещь как тригер.. и сделал бы вот как:

1. одна таблица входящих значений (всё из МТ4 скидывалось бы в одну такую таблицу)

2. тригерами на афтер_инсерт сделал бы соответствующую обработку

3. воспользовался бы поиском, тут тем много по мусклу было :)

 
Посмотрите ветку simple mysql wrapper.
[Удален]  

Полезная инфа, спасибо.

Но там не описана моя задача и не преведены способы её решения.

 
Impeller >>:

Полезная инфа, спасибо.

Но там не описана моя задача и не преведены способы её решения.

Самое простое решение для плохо знающего SQL:

1) создать поля ID для `AccountCompany` и `Symbols` (AccountCompanyID и SymbolsID например)

2) перед запросом на вставку сделать два запроса к таблицам `AccountCompany` и `Symbols` для выяснения соответствующих ID

3) вызвать запрос на всавку с уже изветсными AccountCompanyID и SymbolsID

[Deleted]  

Ну как я понимаю инструментов и ДЦ силно ограниченное колличество (т.е. много меньше млн.), а следовательно можно просто посмотреть какие ID им присвоены в БД и написать простой switch для их подстановки... Ну или чтобы программа была более динамичной, или эти таблицы постоянно не доступны, то сделать тектовый файлик и этими ID и выбирать их оттуда... а так mql_coder абсолютно прав, только это наверно правильней делать в init() чтобы не каждый раз мучать БД...

[Deleted]  
А вообще-то тебе даже не нужны таблицы для разных периодов, их можно сгенерировать c помощью VIEW используя GROUP BY
 
melkobrat >>:

Не страдайте некрофилией. Теме уже 3 месяца, зачем ее подняли? :D

[Удален]  
http://dev.mysql.com/doc/