我有一个包含 6 列的数据库,n1 - n6。每行都有一个数字,因此每行有 6 个不同的数字。当我查询时,我会根据数据库中的每一行检查必须提交的 6 个数字。我需要查询来更改组合,因此理论上已完成 36 个查询。
因此示例数据集可能是
N1 N2 N3 N4 N5 N6
1 12 54 36 17 23
我必须查询的数字是
1 54 36 17 23 12
所以它们是相同的,但因为它们的顺序不同,所以不会返回结果。所有 6 个必须匹配才能返回正数。
示例查询:
$sql = "SELECT * FROM numbers WHERE n1 = :n1 AND n2 = :n2 AND n3 = :n3 AND n4 = :n4 AND n5 = :n5 AND n6 = :n6";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":n1", $n1);
$stmt->bindParam(":n2", $n2);
$stmt->bindParam(":n3", $n3);
$stmt->bindParam(":n4", $n4);
$stmt->bindParam(":n5", $n5);
$stmt->bindParam(":n6", $n6);
$stmt->execute();
我可以使用 36 个不同的查询来完成此操作,但如果能够在一个查询中完成此操作会更有用。
最佳答案
嗯。 。 。连续存储六个数字听起来像是一种糟糕的数据格式。如果这些是行而不是列,那就更容易了。
但是,假设没有重复项,您可以执行以下操作:
SELECT *
FROM numbers
WHERE n1 IN (:n1, :n2, :n3, :n4, :n5, :n6) AND
n2 IN (:n1, :n2, :n3, :n4, :n5, :n6) AND
n3 IN (:n1, :n2, :n3, :n4, :n5, :n6) AND
n4 IN (:n1, :n2, :n3, :n4, :n5, :n6) AND
n5 IN (:n1, :n2, :n3, :n4, :n5, :n6) AND
n6 IN (:n1, :n2, :n3, :n4, :n5, :n6);
关于php - 查询6个不同列的6个数字的所有组合sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38946261/