2011-03-04 82 views
0

空的變量,如果我有4個變量,我要選擇不同的值形成數據的基礎上PHP和MySQL:我怎麼能忽略從選擇

<?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(關鍵字)爲空將選擇所有空的Fileds,但我想如果$ 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' "); 

+0

看一看蓋爾肖的博客文章這一功能[catch-all queries](http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/)。 – 2011-03-04 22:48:33

回答

1

非常感謝每一個特別experimentX ..你的答案幫助我得到正確的功能我剛剛用(!空)替換(isset)..然後,每一件事情會比正常

$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; 

多用,如果有是空的變量就會再次忽略

感謝每一個爲你有益的建議

3

嘗試這個。


$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)); 
+0

對不起,沒有+1,因爲'$$'語法很糟糕,而且是由於選擇不當而導致的。 – Artefact2 2011-03-04 22:58:57

+1

謝謝Dimitry Z ..但你忘了[]]在最後一行 結束了我試過了,但它使我的本地主機兩次崩潰 – 2011-03-04 23:12:49

+0

@ Artefact2,+1 plz。 – Dimitry 2011-03-04 23:19:28

0

讓你的SELECT語句的字符串你打電話的mysql_query(...)之前這麼做沿此線的東西:對所有變量的

$queryString = "Select DISTINCT title, description FROM table WHERE"; 
if(!empty($var1)) 
    $queryString .= " keywords = $var1"; 

等等。你也可以實現for循環並循環你的$ var1 - $ var#並檢查!empty($ var#)

+0

我認爲有一個簡單的方法,問題將與(OR),如果我有很多變量,這將不會有效 – 2011-03-04 23:15:26

0

爲什麼你不簡單地構建一個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 { 
... 
} 
+0

所以基本上你是複製噸代碼,並且有2^4 = 16個可能的組合。如果有5個變量,則會有32個組合,依此類推。 – NullUserException 2011-03-04 22:58:31

+0

是的,我剛剛意識到,需要檢查所有可能的情況。 – Jerome 2011-03-04 23:00:45

+0

我正在使用這種方式,我發現這將是一種有效的方式,我將需要編寫案例 讓我們舉例 1 - 當$ var1空和其他不空 2 - 當$ var2空和其他不空 3 - 當$ var3空和其他不空 4 - 當$ var4空和其他不空 5 - 當$ var1和$ var2爲空而其他不爲空 6 - 當$ var1和$ var3爲空而其他不是空的 等 – 2011-03-04 23:20:12

0

(我剛剛發佈了低於他的重複崗位,所以我重新張貼下面這裏)

原諒我,如果有什麼是錯的,這是非常晚在這裏,我剛纔輸入這在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. 
0

嗯,有這樣做的馬努方式,但我已經找到了最短的方法是創建下列形式的數組

$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 
結果