если у меня есть 4 переменные, и я хочу выбрать значения DISTINCT формы базы данных
<?php $var1 = ""; //this variable can be blank $var2 = ""; //this variable can be blank $var3 = ""; //this variable can be blank $var4 = ""; //this variable can be blank $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE **keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4'** "); ?>
примечание: некоторые или все переменные ($ var1, $ var2, $ var3, $ var4) могут быть пустыми
что я хочу: я хочу игнорировать пустые поля
скажем, что $ var1 (keywords) пуст, он выберет все пустые записи, но я хочу, чтобы $ var1 был пуст, результат будет подобен
$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' ");
если $ var2 пуст, результат будет подобен
$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR date='$var3' OR forums='$var4' ");
если $ var1 и $ var2 пусты, результат будет подобен
$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE date='$var3' OR forums='$var4' ");
и так далее
Попробуй это.
$vars = array( 'keywords' => '', // instead of var1 'author' => '', // instead of var2 'date' => '', // instead of var3 'forums' => '', // instead of var4 ); $where = array(); foreach ($vars as $varname => $varvalue) { if (trim($varvalue) != '') $where[] = "`$varname` = '" . mysql_real_escape_string($varvalue) . "'"; } $result = mysql_query("SELECT DISTINCT title, description FROM table WHERE " . join(" OR ", $where));
Спасибо, что каждый конкретный экспериментX .. Ваш ответ помог мне получить правильную функцию. Я просто заменил (isset) на (! Empty) .. Тогда каждая вещь будет больше, чем ОК
$vars = array( (!empty($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, (!empty($_GET["var2"]))? " author = '". $_GET["var2"] ."' ": null, (!empty($_GET["var3"]))? " date = '". $_GET["var3"] ."' ": null, (!empty($_GET["var4"]))? " forums = '". $_GET["var4"] ."' ": null ); function myfilterarray($var) { return !empty($var)?$var: null; } $newvars = array_filter($vars, 'myfilterarray'); $where = join(" OR ", $newvars); $sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null); echo $sql;
с этой функцией, если есть пустая переменная, ею будет пренебрегать
Еще раз спасибо за ваше полезное предложение
сделайте строку строки выбора перед вызовом mysql_query (…), чтобы сделать что-то в этом роде:
$queryString = "Select DISTINCT title, description FROM table WHERE"; if(!empty($var1)) $queryString .= " keywords = $var1";
и т. д. для всех ваших переменных. вы также можете реализовать цикл for и цикл через переменную $ var1 – $ var # и проверить на пустое ($ var #)
Почему вы не просто создаете структуру if else? подобно
if ($var1!="" && $var2!="" && $var3!="" && $var4!=""){ $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4' ") } else if ($var2!="" && $var3!="" && $var4!=""){ $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' "); } else if { ... }
(Я только что разместил ниже в своем дублирующем сообщении, поэтому я снова разместил здесь ниже)
Простите меня, если что-то не так, очень поздно, и я просто набрал это в блокноте в Windows, без среды для тестирования. * Используйте с осторожностью * 🙂
$vars = array( 'blah1' => '', 'blah2' => '', 'blah3' => '', ); $sql_statement = "SELECT first, last FROM names WHERE"; $clause = ""; foreach($vars as $k=$v) { $k = trim($k); if(!empty($k)) { $clause .= " `$k` = '$v' OR"; } } $clause = rtrim($clause, "OR"); // $clause should have what you want.
Ну, есть способы сделать это, но самый короткий способ, который я нашел, – создать массив следующей формы
$vars = array( (isset($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, (isset($_GET["var2"]))? " author = '". $_GET["var2"] ."' ": null, (isset($_GET["var3"]))? " date = '". $_GET["var3"] ."' ": null, (isset($_GET["var4"]))? " forums = '". $_GET["var4"] ."' ": null ); function myfilterarray($var) { return !empty($var)?$var: null; } $newvars = array_filter($vars, 'myfilterarray'); $where = join(" OR ", $newvars); $sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null); echo $sql;
Ваш результат для http://localhost/?var1=sadfsadf&var2=sadfasdf&var3=asdfasdf
SELECT DISTINCT title, description FROM table WHERE keyword = 'sadfsadf' OR author = 'sadfasdf' OR date = 'asdfasdf'
Ваш результат для http://localhost/?
SELECT DISTINCT title, description FROM table