HowTo: Запрос MySQL для получения данных поиска, ограничивая результаты и сортировку по полю. - PullRequest
0 голосов
/ 19 августа 2011

У меня есть две простые таблицы Mysql:

SYMBOL
| id | symbol |  
(INT(primary) - varchar)

PRICE
| id | id_symbol | date | price |  
(INT(primary), INT(index), date, double)

Мне нужно передать два символа, чтобы получить что-то вроде:

   DATE         A       B
2001-01-01 | 100.25 | 25.26
2001-01-02 | 100.23 | 25.25
2001-01-03 | 100.24 | 25.24
2001-01-04 | 100.25 | 25.26
2001-01-05 | 100.26 | 25.28
2001-01-06 | 100.27 | 30.29

Где A и B - это символы, которые мне нужно искать, а date - это дата цен.(потому что мне нужно та же дата для сравнения символов)

Если у одного символа нет даты, у которой есть другая, я должен ее перепрыгнуть.Мне нужно только получить последние N цен этих символов.

ЗАКАЗАТЬ: с самой ранней даты до самой последней (например, последние 100 цен обоих)

Как можноЯ реализую этот запрос?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Я думаю, вам следует обновить свой вопрос, чтобы устранить любые ошибки, допущенные вами при представлении ваших данных. Мне трудно следить за деталями. Тем не менее, я думаю, исходя из того, что я вижу, есть четыре концепции MySQL, которые вам нужны для решения вашей проблемы.

Во-первых, это СОЕДИНЕНИЯ, которые вы использовали бы для объединения двух таблиц, чтобы вы могли выбрать связанные данные, используя ключ, который вы описали как "id_symbol"

Вторым будет использование LIMIT, которое позволит вам указать количество возвращаемых записей, например, если бы вы хотели одну запись, вы использовали бы ключ LIMIT 1 или если бы вы хотели сто записей LIMIT 100

Третье - использовать предложение WHERE, чтобы позволить вам искать конкретное значение в одном из ваших полей в таблице, которую вы запрашиваете.

Последним является ORDER BY, который позволит вам указать поле для сортировки возвращаемых записей и направление, в котором вы хотите, чтобы они сортировали ASC или DESC

Пример:

SELECT *
FROM table1
  JOIN table2 ON table1.id = table2.table1_id
WHERE table1.searchfield = 'search string'
LIMIT 100
ORDER BY table1.orderfield DESC

(Это псевдокод, поэтому этот запрос может не работать, но он близок и должен дать вам правильную идею.)

Я предлагаю обратиться к документации по MySQL, найденной здесь она должна содержать все, что вам нужно для продолжения работы.

0 голосов
/ 19 августа 2011

Выполнение этих шагов должно принести вам желаемый результат:

  1. Получить даты и цены для символа A.(Внутреннее соединение PRICE с SYMBOL для получения необходимых строк.)

  2. Аналогичным образом получите даты и цены для символа B.

  3. Внутреннее объединение двух наборов результатов в столбце даты и извлечение цены из первого набора результатов в виде столбца A, а другого - B.

Это должнобудь проще, если умеешь объединять таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...