Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用多个联接连接查询字符串_Php_Mysql_Sql - Fatal编程技术网

Php 用多个联接连接查询字符串

Php 用多个联接连接查询字符串,php,mysql,sql,Php,Mysql,Sql,我对连接和基于字段动态生成连接非常陌生 所有键变量($et_key、$ct_key、$key)都是根据映射到数据库列名的下拉值生成的。例如: $state = $_POST['geography']; $states = array('Alabama','Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District Of Columbia', 'Florida', '

我对连接和基于字段动态生成连接非常陌生

所有键变量($et_key、$ct_key、$key)都是根据映射到数据库列名的下拉值生成的。例如:

$state = $_POST['geography'];

$states = array('Alabama','Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District Of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts ', 'Michigan', 'Minnesota', 'Mississippi ', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming');

$key = array_search($state, $states);

    if ($key !== false) {
        $state_key = $key+1;
    } 
这是我的完整查询代码。我主要困惑的是如何处理所有的“和”行——第一行不能有“和”,但就我所知,后面的行必须有。我不知道如何解决这个问题。我还没有重构这个或任何东西,很抱歉重复性太差

$query=("SELECT * FROM exchange");

if($et_key) {
    $query .= " INNER JOIN`exchange_type` on `exchange_type`.exchangeID = exchange.exchangeID ";
}

if($ct_key) {
    $query .= " INNER JOIN `company_type` ON `company_type`.exchangeID = exchange.exchangeID ";
}

if($key) {
    $query .= " INNER JOIN `exchange_states` on `exchange_states`.exchangeID = exchange.exchangeID ";
}

if ($et_key || $ct_key || $key) {
    $query .= " where ";
}

if($et_key) {
    $query .= " and `exchange_type`.$et_key=1 ";
}

if($ct_key) {
    $query .= " and `company_type`.$ct_key = 1 ";
}

if($key) {
    $query .= " and exchange_states`.stateID = $state_key ";
}


if (!empty($keywork)) {
    $query .= "and (exchange.`exchange-name` LIKE '%$search%' OR exchange.`description` LIKE '%$search%')";
}


echo $query;
更改此项:

if ($et_key || $ct_key || $key) {
   $query .= " where ";
}
为此:

if ($et_key || $ct_key || $key) {
   $query .= " where 1=1 ";
}

那么,“AND”都有意义了

完美!我知道这很容易解决,但我被难住了。非常感谢。