gpt4 book ai didi

php - 使用 php 自动化 UNION Mysql 查询

转载 作者:行者123 更新时间:2023-11-29 08:58:24 25 4
gpt4 key购买 nike

我不确定我的标题格式是否正确,但这是这个问题的延续 How to do Mysql Union with check if row exists?

我们让 UNION 运行良好并合并了 7 个表,现在的问题是我们希望为用户提供禁用从特定表进行搜索的选项。当然你猜对了,sql 返回错误,因为如果用户想要我们放在 UNION 中的最后一个表中的数据,我们的 sql 以 UNION 而不是 SELECT 开头,

因此我们创建了多个返回可用选项数组的选择列表print_r($tables) 返回数组 ( [0] => table_1 [1] => table_2...

foreach ($tables as $key=> $source){
if($key ==0){
$UNION='';
}else{
$UNION='UNION ';
}
}

这是完美的,只有数组中的第一个没有得到UNION,但是在sql中我们有一个问题,因为我们不能循环相同的查询,并且我们不能多次在循环之外获取$UNION var(例如全局变量) )。

if (in_array("table_1", $tables)) {
$sql1 ="".$UNION."SELECT i.title,i.category,'a' as source FROM table_a WHERE REGEXP 'news'";
}
if (in_array("table_2", $tables)) {
$sql2 ="".$UNION."SELECT i.title,i.category, 'b' as source FROM table_b WHERE REGEXP 'news'";
}


$query=$sql1.$sql2;

例如,我们尝试通过将变量 $UNION 放入数组并内爆来将其置于 foreach 循环之外,但这也不起作用

foreach ($tables as $key=> $source){
if($key ==0){
$UNION='';
}else{
$UNION='UNION ';
}
$get_union[]=$UNION;
}

if (in_array("table_1", $tables)) {
$sql1 ="".implode($UNION)."SELECT i.title,i.category,'a' as source FROM table_a WHERE REGEXP 'news'";
}
if (in_array("table_2", $tables)) {
$sql2 ="".implode($UNION)."SELECT i.title,i.category, 'b' as source FROM table_b WHERE REGEXP 'news'";
}

我只是被要求编辑问题,所以这是我需要的结果

用户从多个选择列表中选择选项以禁用 table_b 和 table_c我们的多选选项输出和数组。我需要确保数组中的第一个没有 UNION 作为前缀,然后运行查询。所以像这样:

$table =array([0]=>table_a,[1]=>table_b,[2]=>table_c);

if($table[0]){
$UNION='';
}else{
$UNION='UNION ';
}

if (in_array("table_a", $tables)) {
$sql1 ="".$UNION."SELECT i.title,i.category,'a' as source FROM table_a WHERE REGEXP 'news'";
}
if (in_array("table_b", $tables)) {
$sql2 ="".$UNION."SELECT i.title,i.category, 'b' as source FROM table_b WHERE REGEXP 'news'";
}
if (in_array("table_c", $tables)) {
$sql3 ="".$UNION."SELECT i.title,i.category, 'c' as source FROM table_b WHERE REGEXP 'news'";
}

$query=$sql1.$sql2.$sql2;

任何勇敢的灵魂可以帮忙,请帮忙。谢谢!

最佳答案

所以你想获得与此类似的结果:

SELECT  i.title,i.category,'a' as source FROM table_a  WHERE REGEXP 'news'
UNION
SELECT i.title,i.category, 'b' as source FROM table_b WHERE REGEXP 'news'

给定$tables = array('table_a', 'table_b',...);

问题是你没有办法将“table_a”与“a”匹配(当然,除非这些是你真正的表名,我对此表示严重怀疑)

因此,您需要做的是创建一个哈希表,将每个表与您想要修复的固定值相匹配:

$tablesAndValues = array (
'table_a' => 'a',
'users' => 'address',
...
);

一旦您可以通过这种方式创建查询:

$sqlArray = array();
for ($tables as $table => $value) {
$sqlArray[] = "SELECT i.title, i.category, '" . $value . "' as source FROM " . $table . " WHERE REGEXP 'news'";
}

现在让我们内爆数组:

$sql = implode(" UNION ", $sqlArray);

我对 PHP 了解不多,但这应该能让您了解如何解决它。

关于php - 使用 php 自动化 UNION Mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303540/

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