python - 在python中使用SQL选择指定行之前和之后的行
问题描述
预先感谢您提供的任何帮助
我正在制作一个 API,从字典中检索单词,到目前为止一切都很好。
创建该 API 的要求之一是,当有人向此端点(例如:http ://example.com/words/house )发送请求时,返回该单词和所有其他字段,让我向您展示更多详细信息。
我有这张表:
word varchar,
definition text,
pharseology text,
etymology text,
onomastics text,
example text,
dictionary_id integer -> FK
所以基本上,当我去这个端点时,会得到一个 JSON 响应,其中包含单词,也是同义词,我有一个单独的表指向这个与 one->Many 相关的表,从单词到同义词,
现在让我进入正题,请求说当你请求一个单词 ex “house” 时,应该有一个像图片一样的响应,而且还有一个 List 包含该单词之前的所有单词, 和那个词之后。例如,如果您搜索“foot”这个词,那么词之后可以是foot 战士、foot trafic 等,或者在“eating”或 smth 之前。
所以我有两个问题:
1.我应该创建一个新表并与单词表建立关系以显示指定单词具有的这些单词列表。
2.如何编写查询以获取定义单词顶部和底部的所有行..
谢谢大家的答案,
解决方案
我不会为此创建另一个表。以下使用 SQL Server 语法的查询将在搜索词 (@SearchWord) 之前和之后为您提供一组词 (@WordRange)。如果您使用的是 SQL Server 以外的数据库,则应该可以修改语法以适合您。
基本思想是按字母顺序排列所有单词并为其分配一个行号。然后根据其行号选择所有在搜索词之前和之后的行数的词。
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);
你可以在这里看到它的实际效果。
推荐阅读
- hadoop - 是否有任何 Hive SQL 函数来评估字段是否包含字母?
- python - 如何使用 pytexit 显示乘法和除法符号?
- java - Java SpringBoot - 空列表的@Value
- javascript - 如何在反应中将第一个状态数据分配给第二个状态?
- python - 无法在 Django Celery Beat 的函数中获取 kwargs 数据
- python - 键盘记录器未记录 txt 文档中的字符
- amazon-web-services - 创建 vpc 链接 aws 所需的权限
- php - string(331) "未使用旧版 People API
- python - 使用 mypy 确保 Python 类中的两个字段是给定基类的相同子类
- python - 码头工人 | 在 docker 容器中访问 python 中的主机文件