GVKun编程网logo

具有“ WHERE…IN”查询的PDO(sql查询where的使用)

31

如果您想了解具有“WHERE…IN”查询的PDO和sql查询where的使用的知识,那么本篇文章将是您的不二之选。我们将深入剖析具有“WHERE…IN”查询的PDO的各个方面,并为您解答sql查询wh

如果您想了解具有“ WHERE…IN”查询的PDOsql查询where的使用的知识,那么本篇文章将是您的不二之选。我们将深入剖析具有“ WHERE…IN”查询的PDO的各个方面,并为您解答sql查询where的使用的疑在这篇文章中,我们将为您介绍具有“ WHERE…IN”查询的PDO的相关知识,同时也会详细的解释sql查询where的使用的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

具有“ WHERE…IN”查询的PDO(sql查询where的使用)

具有“ WHERE…IN”查询的PDO(sql查询where的使用)

我正在重新编写一些PHP代码以使用PDO进行数据库访问,但是我遇到了“ WHERE … IN”查询问题。

我正在尝试根据检查表单上的哪些项目从数据库中删除某些内容。列表的长度和内容将有所不同,但是对于此示例,请想象是这样的:

$idlist = ''260,201,221,216,217,169,210,212,213'';

然后查询如下所示:

$query = "DELETE from `foo` WHERE `id` IN (:idlist)";$st = $db->prepare($query);$st->execute(array('':idlist'' => $idlist));

当我这样做时,仅第一个ID被删除。(我认为它会抛出逗号及其后的所有内容。)

我也尝试过制作$idlist一个数组,但是它不会删除任何东西。

在PDO准备好的语句中使用项目列表的正确方法是什么?

答案1

小编典典

由于您无法将值(数字)与控制流逻辑(逗号)与准备好的语句混合使用,因此每个值需要一个占位符。

$idlist = array(''260'',''201'',''221'',''216'',''217'',''169'',''210'',''212'',''213'');$questionmarks = str_repeat("?,", count($idlist)-1) . "?";$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");

然后循环绑定参数。

c# – Dapper.net“where … in”查询不适用于PostgreSQL

c# – Dapper.net“where … in”查询不适用于PostgreSQL

以下查询始终生成错误“42601:语法错误在或接近”$1“
”.
connection.Query<CarStatsProjection>(
                @"select manufacturer,model,year,AVG(price) as averageprice,AVG(miles) as averagemiles,COUNT(*) as count
                        from products
                        where manufacturer IN @manufacturers 
                            AND model IN @models
                            AND year IN @years
                        group by manufacturer,year",new { manufacturers = new[] { "BMW","AUDI" },models = new[] { "M4","A3" },years = new[] { 2016,2015 } });

我通过在下面创建一个方法并在内部调用它来构建SQL查询来解决这个问题.想知道Dapper是否可以使用对象参数来处理这个问题吗?

public static string ToInsql(this IEnumerable<object> values)
    {
        var flattened = values.Select(x => $"'{x}'");
        var flatString = string.Join(",",flattened);

        return $"({flatString})";
    }

解决方法

Postgresql IN运算符不支持数组(或任何其他集合)作为参数,只支持普通列表(使用ToInsql方法生成的列表),对于Postgresql,您需要使用ANY运算符,如下所示:
SELECT manufacturer,COUNT(*) as count
FROM products
WHERE manufacturer = ANY(@manufacturers)
AND model = ANY(@models)
AND year = ANY(@years)
GROUP BY manufacturer,year

c# – 在DocumentDB中是否可以像在Sql Server中一样查询“Where In”?

c# – 在DocumentDB中是否可以像在Sql Server中一样查询“Where In”?

我有以下简单的sql Where我在DocumentDB中尝试但我无法使它在Query Explorer上工作:

SELECT * FROM root.DocumentDbTest_AllFieldTypes f
    WHERE f.field1 NOT IN (
                            SELECT g.field1 FROM root.DocumentDbTest_AllFieldTypes g 
                            WHERE g.time = "09:12:34"
                          );

我收到以下错误:

Syntax error,incorrect syntax near 'SELECT'.

有人可以告诉我正确的语法也许这样做IN查询?

解决方法

Document支持WHERE子句中的IN运算符;但它不支持子选择.

换句话说……这是支持的:

SELECT food.id,food.description,food.tags,food.foodGroup,food.version
FROM food
WHERE food.foodGroup IN ("Poultry Products","Sausages and Luncheon Meats")

这不受支持:

SELECT *
FROM root.DocumentDbTest_AllFieldTypes f
WHERE f.field1 NOT IN
    ( SELECT g.field1
     FROM root.DocumentDbTest_AllFieldTypes g
     WHERE g.time = "09:12:34" );

如果您想在DocumentDB中查看子选择,请在DocumentDB’s feedback page上投票支持此功能.

Firestore 多个带有“and”逻辑的“in”查询,查询结构

Firestore 多个带有“and”逻辑的“in”查询,查询结构

这是另一种选择:复合值

假设我们有三个制造商,每个制造商都有多种颜色

Manufacturer A
Manufacturer B
Manufacturer C

然后是三种颜色

Red
White
Blue

如果我们将数据存储在 Firestore 中的制造商和颜色等标准字段中,然后利用复合字段,则可以更轻松地执行多个 Or 查询

garment_0
   manufacturer: "Manufacturer A"
   color: "Red"
   compound: "A_R" //manufacture A,Red
garment_1
   manufacturer: "Manufacturer A"
   color: "White"
   compound: "A_W"
garment_2
   manufacturer: "Manufacturer B"
   color: "Blue"
   compound: "B_B"
garment_3
   manufacturer: "Manufacturer B"
   color: "White"
   compound: "B_W"

假设用户想要制造商 A 和 B 的所有白色或蓝色服装

garmentsRef.whereField("compound",in: ["A_W","A_B","B_W","B_B"])

将退回服装_1(制造商 A,白色)、服装_2(制造商 B,蓝色)和服装_3(制造商 B,白色)

MySQL“ IN”查询使用子查询的速度非常慢,但是使用显式值的速度非常快

MySQL“ IN”查询使用子查询的速度非常慢,但是使用显式值的速度非常快

我有一个MySQL查询(Ubu 10.04,Innodb,Core i7、16Gb RAM,SSD驱动器,优化的MySQL参数):

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')

表em_link_data有大约700万行,em_link有数千行。此查询大约需要 18秒 才能完成。但是,如果我替换子查询的结果并执行以下操作:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);

那么查询将在不到1毫秒的时间内运行。仅子查询在不到1毫秒的时间内运行,因此索引了列linkid。

如果我将查询重写为联接,则还不到1ms。为什么“
IN”查询中的子查询这么慢,为什么其中包含值的这么快?我无法重写查询(购买的软件),因此希望进行一些调整或提示以加快查询速度!任何帮助表示赞赏。

今天的关于具有“ WHERE…IN”查询的PDOsql查询where的使用的分享已经结束,谢谢您的关注,如果想了解更多关于c# – Dapper.net“where … in”查询不适用于PostgreSQL、c# – 在DocumentDB中是否可以像在Sql Server中一样查询“Where In”?、Firestore 多个带有“and”逻辑的“in”查询,查询结构、MySQL“ IN”查询使用子查询的速度非常慢,但是使用显式值的速度非常快的相关知识,请在本站进行查询。

本文标签: