如果 MySQL 查询中的参数


if argument inside mysql query

我现在有三个不同的PHP页面,它们包含几乎相同的信息,因此为了能够将其减少到一个页面,我需要在mysql查询中有一个php变量。今天是这样的:

$query1  = "SELECT * FROM `Yrker` WHERE `Kategori` = '1' AND `Bruk` = '1' ORDER BY yearstart DESC, mndstart DESC";`

如果我在地址栏中输入 ?nobruk=no,我需要从此查询行中删除" AND Bruk = '1'"。这是否可能,如果可能,如何?

您不想(也不能(在查询中放置if;您希望使用if根据某些条件创建查询。有很多方法可以写这个,其中之一是

if (!empty($_GET['nobruk'])) {
    $query1 = "SELECT ... WHERE `Kategori` = '1' ORDER BY ...";
}
else {
    $query1 = "SELECT ... WHERE `Kategori` = '1' AND `Bruk` = '1' ORDER BY ...";
}

另一种更短且涉及三元运算符的方法是

$includeBruk = empty($_GET['nobruk']);
$query1 = "SELECT ... WHERE `Kategori` = '1' ".
          ($includeBruk ? "AND `Bruk` = '1' " : "").
          "ORDER BY ...";

一个简单的if语句:

$query1  = "SELECT * FROM `Yrker` WHERE `Kategori` = '1'";
  if ($_GET['nobruk']!='no') {
    $query1.=" AND `Bruk` = '1'";
  }
$query1.= " ORDER BY yearstart DESC, mndstart DESC";

像这样:

<?php
$query = ($_REQUEST['nobruk'] == "no") ? "SELECT * FROM `Yrker` WHERE `Kategori` = '1' ORDER BY yearstart DESC, mndstart DESC": "SELECT * FROM `Yrker` WHERE `Kategori` = '1' AND `Bruk` = '1' ORDER BY yearstart DESC, mndstart DESC";
echo $query;
?>
$query1 = "SELECT * FROM `Yrker` WHERE `Kategori`='1' ".($_GET['nobruk'] === 'no' ? "" : "AND `Bruk`='1' ")."ORDER BY yearstart DESC, mndstart DESC";