我一直在寻找答案,但我尝试的一切都给了我一个错误。
我有一个php函数:
function _buildQueryCategoryK2Multiple(){
$query="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17";
return $query;
}
基本上我想在$ query中添加另一行,例如:
function _buildQueryCategoryK2Multiple(){
$query1="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17";
$query2="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18";
return $query1.$query2;
}
如果我这样做,虽然我收到错误。有谁知道这样做的正确方法? 谢谢
答案 0 :(得分:2)
http://www.tutorialspoint.com/mysql/mysql-in-clause.htm
如果要获得17和18,请使用SQL IN
语句而不是复制整个查询,如果要选择100个ID,将会是什么?你会向db发送千字节的查询吗?
示例:
function _buildQueryCategoryK2Multiple(){
//if ids you are getting in array, you can implode it to string with ',' and put the string variable instead of '17,18'
$query="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid in (17, 18)";
return $query;
}
答案 1 :(得分:1)
在此处为 $query1
添加分号,如图所示
$query1="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17;";
-----------------------------^
您需要使用 ;
如果您使用MySQL WorkBench
,则可以找到它。
答案 2 :(得分:1)
您应该使用 ;
分隔查询
一种方法是使用implode()
:
function _buildQueryCategoryK2Multiple(){
$query[]="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17";
$query[]="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18";
return implode(";",$query);
}
答案 3 :(得分:1)
分号是一个问题,因为它描绘了MySQL命令行的结束。所以你需要将它添加到每行的末尾。虽然有些人会建议连接查询,但更简单的方法是更灵活 - 至少从我现实世界中使用这样的场景 - 是创建一个数组&在其上使用implode()
。所以你的代码就是这样。
function _buildQueryCategoryK2Multiple(){
$query = array();
$query[] = "select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17;";
$query[] = "select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18;";
return implode(' ', $query);
}
基于您提出的查询的另一个更优雅的选项是向函数发送值数组。
function _buildQueryCategoryK2Multiple($catid_array = array()){
if (empty($catid_array)) {
$catid_array = array(17,18);
}
$query = array();
foreach ($catid_array as $catid) {
$query[] = sprintf("select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=%d;", $catid);
}
return implode(' ', $query);
}
答案 4 :(得分:0)
你用两个特殊字符“|”连接两个字符串或“#”等返回单个字符串。
在调用函数中,您可以使用您使用的特殊字符拆分两个字符串并单独使用。
由于
答案 5 :(得分:0)
需要添加;
每个select
声明的结尾
function _buildQueryCategoryK2Multiple(){
$query1="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and (catid=17 OR catid=18); ";
$query2="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18; ";
return $query1.' '.$query2;
}
答案 6 :(得分:0)
您可以将数组格式用作
function _buildQueryCategoryK2Multiple(){
$returnArr = array();
$returnArr['query1'] ="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17";
$returnArr['query2'] ="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18";
return $returnArr;
}
答案 7 :(得分:-1)
你可以这样做:
function _buildQueryCategoryK2Multiple()
{
$query="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=17";
$query .= " union all "
$query .= "select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid=18";
return $query;
}
或
function _buildQueryCategoryK2Multiple()
{
$query="select id,title,alias,catid,introtext FROM #__k2_items where published=1 and catid in (17,18,19) ";
return $query;
}