假设我在一个处理查询的php文件中有相当数量的连接和子查询。 注:我把什么$查询看上去像底部有条件查询的查询
$query = query here;
if ($query) {
return $query->result();
} else {
return false;
}
}
然后在我的PHP文件,处理HTML的例子,我有需要作出其他查询e.g一些条件一般的foreach循环; 注意:结果包含对象$ query-> result()。
foreach ($results as $item) {
$some_array = array();
$some_id = $item->id;
if ($some_id != 0) {
//id_return_other_id is a function that querys a db table and returns the specified column in the same table, it returns just one field
$other_id = id_return_other_id($some_id);
$some_query = another query that requires some joins and a subquery;
$some_array = the values that are returned from some_query in an array
//here i'm converting obj post into an array so i can merge the data in $some_array to item(Which was converted into an array) then convert all of it back into an object
$item = (object)array_merge($some_array, (array)$item);
}
//do the usual dynamic html stuff here.
}
这完美的作品,但因为我不喜欢我在做查询大量的在一个循环的方式,有没有办法来添加,如果$ SOME_ID!= 0,处理查询的文件吗? 我试过
$query = query here;
//declaring some array as empty when some_id is 0
$some_array = array();
if ($query) {
if ($some_id != 0) {
//same as i said before
$other_id = $this->id_return_other_id($some_id);
$some_query = some query;
$some_array = array values gotten from some query;
}
$qresult = (object)array_merge($some_array, (array)$query->result);
return $qresult;
} else {
return false;
}
}
这并不明显的原因工作,没有任何一个有什么想法?
此外,如果有一种方法可以在$查询本身中生成这些条件和查询,我会永远爱你。
PS:一个演示查询会是这样的
$sql = "SELECT p.*,up.*,upi.someField,etc..
FROM (
SELECT (another subquery)
FROM table1
WHERE table1_id = 3
UNION ALL
SELECT $user_id
) uf
JOIN table2 p
ON p.id = uf.user_id
LEFT JOIN table3 up
ON .....
LEFT JOIN table4
ON ....
LEFT JOIN table5
ON ....
And so on..etc..
ORDER BY p.date DESC";
$query = mysql_query..
[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护,[弃用过程](http://j.mp/Rj2iVR)已经开始。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – Neal
谢谢Neal,我实际上没有使用mysql_ persay,我使用的是活动记录,我只是把它放在那里来解释我的意思:)你有什么想法我可以去解决我遇到的问题吗? – Saff