Хорошо, я прочитал все подобные темы, но все еще не мог понять это сам.
Моя проблема:
Я пытаюсь сделать таблицу относительных показателей для акций (цены, индексы).
Мне нужно использовать эти 2 таблицы из моей базы данных здесь.
1-й стол:
Названия акций
Я запрашиваю эту таблицу, чтобы получить все названия акций в базе данных.
Например:
Array
(
[0] => LT0000102337
[1] => EE3100034653
[2] => EE3100003609
[3] => EE3800046643
[4] => LT0000127375
[5] => LV0000100659
[6] => LV0000100501
)
2-й стол:
Значения индекса для моих акций (например, EV или EBITDA или P / E)
Все они хранятся для каждого запаса в отдельной таблице, начиная с i и номера запаса (т.е. iLT0000102337 или iEE3100034653).
Структура:
id | ev | ebitda | pe
23 | 12 | 141322 | 15
Допустим, у меня есть номер акции, и мне нужно получить последний идентификатор и его индекс (например, ev = 12).
Теперь мне нужно получить четыре строки из других таблиц фондовых индексов, чье ev ближе всего к 12 и 4 других, чье ev больше 12. Самое большое значение id означает самое новое значение, и мне нужны только те.
То есть одна акция имеет самый большой идентификатор с 10, другая с 11, другая с 15 и т. Д., Поэтому мне нужно получить эти листы как 10, 10.1, 10.5, 11.5, 12 , 14, 15, 18, 22.
У меня довольно сложная структура таблиц, и я думаю, именно это делает ее сложной.
Для того, чтобы собрать все в одну таблицу, я использовал UNION, но теперь я застрял в рейтинге.
foreach($instrumentsm as $instrumentm) {
$sqlxm .= "(SELECT id, ev, '$instrumentm' as name FROM i".$instrumentm." ORDER BY id DESC LIMIT 1)";
if ($i<count($instrumentsm)-1){
$sqlxm .= " UNION ";
$i++;
}
}
$sqlxm .= " ORDER BY ev DESC";
Это создает мне запрос, подобный этому:
(SELECT id, ev, 'LT0000102337' as name
FROM iLT0000102337
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'EE3100034653' as name
FROM iEE3100034653
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'EE3100003609' as name
FROM iEE3100003609
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'EE3800046643' as name
FROM iEE3800046643
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'LT0000127375' as name
FROM iLT0000127375
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'LV0000100659' as name
FROM iLV0000100659
ORDER BY id DESC LIMIT 1)
UNION (SELECT id, ev, 'LV0000100501' as name
FROM iLV0000100501
ORDER BY id DESC LIMIT 1)
ORDER BY ev DESC
Теперь, я использую лучший алгоритм для этого и как сделать это сравнительное сравнение производительности?
Спасибо!