Выбор строк до и после указанной строки с помощью SQL в python - PullRequest
0 голосов
/ 27 февраля 2020

Заранее благодарю за любую помощь, которую вы оказываете

Я создаю API для извлечения слов из словаря, пока что все хорошо.
Одно из требований для создания этого API , когда кто-то отправляет запрос этой конечной точке (например: http://example.com/words/house), чтобы вернуть это слово со всеми другими полями, позвольте мне показать вам более подробную информацию.

У меня есть эта таблица для слов:

 word          varchar,
 definition    text,
 pharseology   text,
 etymology     text,
 onomastics    text,
 example       text,
 dictionary_id integer -> FK

так что в основном, когда я go к этой конечной точке, получаю ответ JSON со словами, также синонимами, что у меня есть отдельная таблица, указывающая на эту в Отношение one-> Many, от слов к синонимам,

enter image description here

Позвольте мне go до настоящего момента, запрос говорит, что когда вы запрашиваете слово ex "house", должен быть ответ, такой же, как на картинках, но также должен быть список со всеми словами, которые идут перед этим словом и после этого слова. Например, если вы ищете слово "foot" ", после слов может быть пехотинец, пеший трафик c et c, или перед как "есть" или что-то.

Итак, у меня есть 2 вопроса:
1. Должен ли я создать новую таблицу и установить связь с таблицей слов, чтобы показать этот список слов, которые есть у указанного слова.
2.Как мне написать запрос, чтобы получить все строки сверху и снизу заданного слова ..

Спасибо всем за ответы,

1 Ответ

1 голос
/ 27 февраля 2020

Я бы не стал создавать другую таблицу для этого. Следующий запрос, использующий SQL Синтаксис сервера, даст вам заданное число (@WordRange) слов до и после поискового слова (@SearchWord). Если вы используете базу данных, отличную от SQL Server, синтаксис должен быть в состоянии изменить для вас.

Основная идея c состоит в том, чтобы упорядочить все ваши слова в алфавитном порядке и назначить им строку число. Затем вы выбираете все слова, которые являются числом строк до и после вашего поискового слова, основываясь на его номере строки.

CREATE TABLE #Dictionary
(
    ID INT
  , Word VARCHAR(50)
);

INSERT INTO #Dictionary
(
    ID
  , Word
)
VALUES (1, 'Elephant'), (2, 'Eel'), (3, 'Armadillo'), (4, 'Armor')
, (5, 'Fence'), (6, 'Park'), (7, 'Mouse'), (8, 'House'), (9, 'Hull')
, (10, 'Sidewalk'), (11, 'Monitor');

------------------------------------------------------------------------------------------------------------------------

DECLARE
    @SearchWord         VARCHAR(50)
  , @SearchWordPosition INT
  , @WordRange          INT;

SET @SearchWord = 'House';
SET @WordRange = 3;

SELECT ID, Word, ROW_NUMBER() OVER (ORDER BY Word) rn FROM #Dictionary;

SELECT @SearchWordPosition = x.rn
FROM   (SELECT Word, ROW_NUMBER() OVER (ORDER BY Word) rn FROM #Dictionary) x
WHERE  x.Word = @SearchWord;

SELECT
      x.Word
    , x.rn
FROM  (SELECT Word, ROW_NUMBER() OVER (ORDER BY Word) rn FROM #Dictionary) x
WHERE x.rn BETWEEN (@SearchWordPosition - @WordRange) AND (@SearchWordPosition + @WordRange);

Вы можете увидеть его в действии здесь .

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