gpt4 book ai didi

php - 如何从查询中删除重复的 JOIN 而无需手动执行?

转载 作者:行者123 更新时间:2023-11-29 13:19:50 24 4
gpt4 key购买 nike

查询的不同部分是从程序中的不同变量收集来形成最终查询,

$start= "SELECT co.name FROM common co";
$fjoin="";
$qwhere= "WHERE fruit=banana";

IF ($fruits==1)
{
$fjoin.= "INNER JOIN fruits fu ON fu.number = co.number";
}
IF ($apple==1)
{
$fjoin.= "INNER JOIN fruits fu ON fu.number = co.number";
}
IF ($banana==1)
{
$fjoin.= "LEFT OUTER JOIN banana ba ON ba.pack = fu.pack";
}

$all=$start.$fjoin.$qwhere;

所以当程序运行时 $all=SELECT co.name FROM common co INNER JOIN 水果 fu ON fu.number = co.number INNER JOIN 水果 fu ON fu.number = co.number LEFT OUTER JOIN 香蕉 ba ON ba。 pack = fu.pack 其中水果=香蕉

给用户三个选项水果,香蕉和苹果,如果用户选择水果,$fruit 变为 1,如果用户选择香蕉,$banana 变为 1,如果用户选择苹果,$apple 变为 1。用户可以同时选择水果和香蕉,或者水果全部选择香蕉和苹果。当用户选择所有选项时,$all 有一个重复的 INNER JOIN,如上所示(INNER JOIN 水果 fu ON fu.number = co.number 是重复的连接)。如何检查最终查询中变量 $all 中的重复 JOINS 并将其删除。有人知道如何识别重复的 JOINS 并将其删除吗?

我使用了 $fjoin= implode('INNER JOIN',array_unique(explode('INNER JOIN', $fjoin)));删除重复的 INNER JOIN 但上面的命令无法分离 INNER JOIN 水果 fu ON fu.number = co.number LEFT OUTER JOIN 香蕉 ba ON ba.pack = fu.pack 因此它说没有找到重复项 :(

我正在考虑在每次连接后添加一个逗号,然后使用此语句 $fjoin= implode(' ',array_unique(explode(',', $fjoin)));这可能有效,但我的程序中有太多 JOIN 语句,无法返回并添加逗号,所以想知道是否有办法通过一些简单的删除重复 JOINS 命令来做到这一点

最佳答案

这里的主要问题是你的条件是错误的。您正在设置变量,而不是评估它。

您有 if ($fruits = 1),它总是设置 $fruits 的值为 1 ,因此条件将始终为 true。使用 == 来评估变量是否等于值。

您可以在此处阅读有关 PHP 比较运算符的更多信息:http://php.net/ternary

编辑:自从您更正了问题后,我在这里添加了一个替代方案。

将连接存储在数组中,然后使用 array_unique() 删除重复项:

$joins = array();

if ($fruits == 1) {
$joins[] = "INNER JOIN fruits fu ON fu.number = co.number";
}
if ($apple == 1) {
$joins[] = "INNER JOIN fruits fu ON fu.number = co.number";
}
if ($banana == 1) {
$joins[] = "LEFT OUTER JOIN banana ba ON ba.pack = fu.pack";
}

$joins = array_unique($joins);

如果所有条件都评估为 true,则生成的数组将删除重复项,如下所示:

Array
(
[0] => INNER JOIN fruits fu ON fu.number = co.number
[2] => LEFT OUTER JOIN banana ba ON ba.pack = fu.pack
)

关于php - 如何从查询中删除重复的 JOIN 而无需手动执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com