我有一个表用户:
FirstName, LastName, Status, City
还有更多领域。我在前端显示这个表,我需要根据每列进行过滤, 在服务器端。 目前,SQL查询提取所有数据:
SELECT * FROM Users
但我使用graphql,我希望能够只将选定的过滤器传递给查询, 例如:
WHERE Status = 'single'
我在后端上使用python ( pymysql)
。
我如何做到这一点,以便当他开始按名称查询时,单独选择状态后的示例
它查询状态为单身的那些,等等。
答案 0 :(得分:0)
不确定我到底想要什么,但听起来你需要在过滤器上应用过滤器。也就是说,使用第一个过滤器减少行数,然后您想应用第二个过滤器以进一步减少行数,依此类推。
如果是这种情况,您需要在用户会话中保留过滤条件(可能使用列表,数组或集合),以便全部累积它们。
第一次,列表没有任何元素,因此您的表将显示所有行,您的SQL将如下所示:
select * from users
当用户添加选择过滤器(状态'单个')时,界面会将其添加到列表中。使用列表,您的后端将生成新的SQL:
select * from users
where status = 'single'
接下来,当用户添加新的选择过滤器(城市'罗马')时,您将其添加到列表中。使用列表后端将生成新的SQL:
select * from users
where status = 'single'
and city = 'Rome'
等等。所以你需要处理两件事:
那就是它!
答案 1 :(得分:0)
您可以通过在查询中使用参数来解决此问题。无论如何,您应该这样做以防止SQL注入攻击。您的查询将如下所示:
Select * from users
where
(@Firstname is null or FirstName = @FirstName) and
(@LastName is null or LastName = @LastName) and
(@Status is null or Status = @Status) and
(@City is null or City = @City)
为了使您的查询字符串始终保持不变,您只需更改参数。检查驱动程序的文档如何添加参数和值。大多数语言驱动程序都支持命名参数,但我不知道pymysql驱动程序是如何做到的。