【问题标题】:Graphql Prisma with nodejs query question带有nodejs查询问题的Graphql Prisma
【发布时间】:2025-12-24 18:30:12
【问题描述】:

我想写SQL查询到

SELECT 
   sm.menu_name
FROM
   shop.menu as sm LEFT JOIN shop.shop_menu as ssm
ON
   sm.idmenu = ssm.menu_id
WHERE
   sm.menu_name LIKE CONCAT('%', ?, '%')
Group by 
   sm.menu_name
Order by rand()

下面这个怎么写?

await prisma.menu.findMany({})

请帮忙!

【问题讨论】:

  • 我们不了解您的数据模型或架构。我们需要这两样东西才能开始寻求帮助。

标签: node.js graphql prisma prisma-graphql


【解决方案1】:
  • 不需要您的 LEFT JOIN
  • LIKE CONCAT -> 用于 prisma 的 StringFilter 包含 contains、startsWith 和 endsWith
  • prisma 不支持 ORDER BY rand(),您有一些选择:在代码中随机排列数组或使用 prisma.raw 进行查询。

文档: https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/filtering https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access

【讨论】:

    【解决方案2】:

    会是这样的:

    prisma.menu.groupBy({
        by: ['menu_name'],
        having: {
            shop_menu  : {
                menu_name: { contains: yourVariableName }
            }
        }
     })
    

    但正如@mazzaker 所说,您必须自己按 rand 订购:/

    【讨论】: