【发布时间】:2012-03-07 09:27:42
【问题描述】:
我不确定我的标题格式是否正确,但这是从这个问题继续 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(例如 global 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;
我们试图通过将 var $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;
任何可以提供帮助的勇敢的人都请这样做。谢谢!
【问题讨论】:
-
我了解您正在尝试构建一个字符串(sql 语句),但我不太明白您想要做什么。您能否使用给定数据集的预期结果字符串更新您的问题?
-
@MostyMostacho 我添加了您要求的信息。现在有意义吗?
-
@Benn:他说给定数据集的预期结果字符串。
-
@David 我想我在第一段中提到过,这是我要输出的 sql 结果,但我看不出这有什么关系,因为我们需要先设置选项才能提交查询数据库。 stackoverflow.com/questions/9299861/…