我在$_GET变量上使用一个switch语句来生成我想在我的页面上得到的结果。
我总是质疑在这种情况下运行查询的最佳方式,因为我根本不知道最佳实践或方法。所以我在下面有一些伪代码,我想知道最好的方法是什么。
这很可能是一种情况,这对性能来说并不重要,但如果它重要,我想确保我做对了。
if(isset($_GET['type'])){
$var = $_GET['type'];
//run the query now and select everything needed from the DB for either switch case.
//view implications that involve pulled data
switch($var){
case '1':
//Or do I run the query here, getting only what I need for this situation
//view implications that involve pulled data
break;
case '2':
//again run the query here, getting only what I need for this situation
//view implications that involve pulled data
break;
}
}
这两种情况都共享来自DB的一个或两个类似的数据块,但每种情况的大部分内容仅在这种情况下才需要。
底线是尽力做到最好,保持代码尽可能的干净和高效。
谢谢!
当然,最好只查询与您相关的数据。占用数据库,通过网络传输更多的数据,然后用PHP做更多的工作来过滤掉您不感兴趣的数据是没有意义的。所以你当然不应该查询"everything"
另一方面,可能也没有理由去switch
。必须有一种重写查询的方法,以便您可以将变量的值注入其中,并且根据该值,它将在任何情况下返回您想要的数据。这当然也取决于你的数据库模式。
如果没有看到您想要的数据库数据,很难判断,但有时我使用if构建sql语句…然后切换,然后执行完成的查询。
$sql = 'SELECT * FROM myTable WHERE ';
switch($_GET['type']){
case 1:
$sql += 'somefield="' . mysql_real_escape_string($_GET['param1']) . '"';
break;
default:
break;
}
当然,在switch语句内查询比在switch语句前查询要好。
它将导致用于存储查询结果的内存更少,并且可能执行更少的代码(例如,如果您正在迭代查询结果)。