简体   繁体   English

在playframework的子句中的mysql查询

[英]mysql query in clause at playframework

in below two sql query sql1 not selecting any row, and sql2 selecting only 1 for 111@k2.com 在下面的两个sql查询中sql1不选择任何行,而sql2111@k2.com仅选择1

 var ids="'111@k2.com','222@k2.com','333@k2.com','444@k2.com','555@k2.com','666@k2.com'"

    val sql1 = SQL("SELECT id,point,privacy FROM `pointTable` WHERE state=1 and  id in ({users})").on("users" -> ids)
    sql1().map { row =>
      val point = if (row[Boolean]("privacy")) { row[Double]("point").toString } else { "0" }
      println(write(Map("id" -> row[String]("id"), "point" -> point)))
    }

    val sql2 = SQL("SELECT id,point,privacy FROM `pointTable` WHERE state=1 and  id in (" + ids + ")")
    sql2().map { row =>
      val point = if (row[Boolean]("privacy")) { row[Double]("point").toString } else { "0" }
      println(write(Map("id" -> row[String]("id"), "point" -> point)))
    }

in phpmyadmin when i run this query manualy it returns 6 rows then why not working perfectly here. 在phpmyadmin中,当我手动运行此查询时,它会返回6行,然后为什么不能在这里正常运行。 i am using play framework 2.2 with scala 2.1 我正在使用scala 2.1和play framework 2.2

That's not going to work. 那是行不通的。 Passing users though on is going to escape the entire string, so it's going to appear as one value instead of a list. 传递users虽然on将要逃离整个字符串,因此它会显示为一个值,而不是一个列表。 Anorm in Play 2.3 actually allows you to pass lists as parameters, but here you'll have to work around that. 实际上,Play 2.3中的Anorm允许您将列表作为参数传递,但是在这里您必须解决此问题。

val ids: List[String] =  List("111@k2.com", "222@k2.com", "333@k2.com")
val indexedIds: List[(String, Int)] = ids.zipWithIndex

// Create a bunch of parameter tokens for the IN clause.. {id_0}, {id_1}, ..
val tokens: String = indexedIds.map{ case (id, index) => s"{id_${index}}" }.mkString(", ")

// Create the parameter bindings for the tokens
val parameters = indexedIds.map{ case (id, index) => (s"id_${index}" -> toParameterValue(id)) }

val sql1 = SQL(s"SELECT id,point,privacy FROM `pointTable` WHERE state=1 and  id in (${tokens})")
    .on(parameters: _ *)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM