我无法将两个MySQL语句合并为一个,目前我必须分别运行它们,然后将它们放入一个数组然后合并这些数组。
这里是函数
第一个功能
/* returns all books from table book */
function getProfitableBooksNew(){
$q = "SELECT *,
ROUND((amazon_new_price/100*80) - lowest_new_price,2) AS margin
FROM ".TBL_BOOKS."
WHERE rank < 200000 AND rank IS NOT NULL
AND lowest_new_price < amazon_new_price/100*80
AND amazon_new_price < 9999
AND ROUND((amazon_new_price/100*80) - lowest_new_price) > (lowest_new_price/100*".MARGIN.")
ORDER BY rank ASC";
$result = mysql_query($q, $this->connection);
if(!$result || (mysql_numrows($result) < 1))
return null;
$arr = array();
$numRows = mysql_num_rows($result);//count
if($numRows>0){
for($i=0; $i<$numRows; $i++){
$arr[] = array(
"isbn" => mysql_result($result, $i, "isbn"),
"title" => mysql_result($result, $i, "title"),
"rank" => mysql_result($result, $i, "rank"),
"amazon_price" => mysql_result($result, $i, "amazon_new_price"),
"amazon_condition" => "New",
"lowest_price" => mysql_result($result, $i, "lowest_new_price"),
"lowest_condition" => "New",
"margin" => mysql_result($result, $i, "margin"),
"last_price_updated" => mysql_result($result, $i, "last_price_updated"),
"last_rank_updated" => mysql_result($result, $i, "last_rank_updated")
);
}
}
return $arr;
}
第二个功能
/* returns all books from table book */
function getProfitableBooksUsed(){
$q = "SELECT *,
ROUND((amazon_used_price/100*80) - lowest_used_price, 2) AS margin
FROM ".TBL_BOOKS."
WHERE rank < 200000 AND rank IS NOT NULL
AND lowest_used_price < amazon_used_price/100*80
AND amazon_used_price < 9999
AND amazon_used_price < amazon_new_price
AND ROUND((amazon_used_price/100*80) - lowest_used_price) > (lowest_used_price/100*".MARGIN.")
ORDER BY rank ASC";
$result = mysql_query($q, $this->connection);
if(!$result || (mysql_numrows($result) < 1))
return null;
$arr = array();
$numRows = mysql_num_rows($result);//count
if($numRows>0){
for($i=0; $i<$numRows; $i++){
$arr[] = array(
"isbn" => mysql_result($result, $i, "isbn"),
"title" => mysql_result($result, $i, "title"),
"rank" => mysql_result($result, $i, "rank"),
"amazon_price" => mysql_result($result, $i, "amazon_used_price"),
"amazon_condition" => mysql_result($result, $i, "amazon_used_condition"),
"lowest_price" => mysql_result($result, $i, "lowest_used_price"),
"lowest_condition" => "Used",
"margin" => mysql_result($result, $i, "margin"),
"last_price_updated" => mysql_result($result, $i, "last_price_updated"),
"last_rank_updated" => mysql_result($result, $i, "last_rank_updated")
);
}
}
return $arr;
}
加入功能
/* returns profitable books */
function getProfitableBooks(){
$new = $this->getProfitableBooksNew();
$used = $this->getProfitableBooksUsed();
if($new && $used){
return array_merge($new, $used);
}else if($new){
return $new;
}else if($used){
return $used;
}else{
return null;
}
}
任何人都可以告诉我至少如何解决这个问题?感谢
答案 0 :(得分:3)
你可以将这两个查询联合到一个像这样的
的查询中SELECT *,
ROUND((amazon_new_price/100*80) - lowest_new_price,2) AS margin,
'new' AS type
FROM ".TBL_BOOKS."
WHERE rank < 200000 AND rank IS NOT NULL
AND lowest_new_price < amazon_new_price/100*80
AND amazon_new_price < 9999
AND ROUND((amazon_new_price/100*80) - lowest_new_price) > (lowest_new_price/100*".MARGIN.")
UNION
SELECT *,
ROUND((amazon_used_price/100*80) - lowest_used_price, 2) AS margin,
'used' as type
FROM ".TBL_BOOKS."
WHERE rank < 200000 AND rank IS NOT NULL
AND lowest_used_price < amazon_used_price/100*80
AND amazon_used_price < 9999
AND amazon_used_price < amazon_new_price
AND ROUND((amazon_used_price/100*80) - lowest_used_price) > (lowest_used_price/100*".MARGIN.")
ORDER BY type ASC, rank ASC
注意我添加了一个字段'type',以便您区分新结果和使用结果。
答案 1 :(得分:1)
您可以使用UNION语法
$sql = "(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2) ORDER BY a LIMIT 10;