-1

誰かを編集して、受け入れられる答えを削除しました:(問題の解決策は、次のような関数を使用することでした:

ifnull(trees.primarycolor, '') LIKE %,

質問の開始: こんにちは、インターネットの友人、家族、同僚、見知らぬ人。私は、そこにいるウェブマスターを興奮させること間違いなしの苦境を抱えています.

私のクエリは次のとおりです。

$result = mysql_query("SELECT trees.* 
$bottom_query 
FROM trees 
INNER JOIN price 
ON trees.ID=price.treeid  
where trees.primarycolor like 
 '$primary_color'  
and trees.secondarycolor like 
 '$secondary_color'  
and trees.fallcolor like 
 '$fall_color'  
and trees.droughtresistant like 
 '$drought_resistant'  
and trees.height like 
 '$height'  
and trees.spread like 
 '$spread'  
and trees.trunkcolor like 
 '$trunk_color'  
and trees.flowering like 
 '$flowering' 
and trees.fruitproducing like 
 '$fruit_producing'  
");

$var_name は、red、green、true、false などの文字列、またはワイルドカード % のいずれかです。

実際に出力されるクエリは次のとおりです。

SELECT trees.* , price.10mm , price.20mm FROM trees INNER JOIN price ON
trees.ID=price.treeid where trees.primarycolor like '%' and trees.secondarycolor like '%'
 and trees.fallcolor like '%' and trees.droughtresistant like '%' and trees.height like
 '%' and trees.spread like '%' and trees.trunkcolor like '%' and trees.flowering like '%'
 and trees.fruitproducing like '%' 

私の問題は、WHERE 句にすべてのワイルドカードを使用しても、クエリが結果を返さないことです。

私は PHP と HTML を使用しています。どのバージョンかはわかりませんが、おそらく最新のものです。

% を * として使用して、データベース内の任意のタイプのものをすべて選択したいと考えています。

私を助けてくださいインターネットの善良な人々、そして栄光はあなたのものになるでしょう:D

4

1 に答える 1

2

フィルターが選択されていない場合は、WHERE 句をまったく使用しないでください。これは、とにかく必要なサーバー上でより高速に実行され、より効率的になります。必要のない場所での負荷を避けるために、すべてのクエリをできるだけ単純にしてください。選択が行われた場合にのみ、クエリに WHERE 句を追加します。すべてのレコードを返す LIKE 句は使用しないでください。入力に基づいて WHERE 句を動的に構築することが、進むべき道です。少し作業が増えますが、長期的にははるかに優れています。

ニック - http://www.meltedjoystick.com

于 2012-06-21T05:46:18.187 に答える