2

このような 2 つの mysql クエリがあるとします。

if(!empty($company))
{
$q1="SELECT * FROM TABLE1 WHERE company='$company'";
}
else
{
$q1="SELECT * FROM TABLE1;
}
$r1=mysqli_query($q1);
if(!empty($color))
{
$q2="SELECT * FROM TABLE1 WHERE color='$color'";
}
else
{
$q2="SELECT * FROM TABLE1;
}
$r2=mysqli_query($q2);

結果を表示しているときに、pid(auto_incrementing 主キー) を比較してみました。

if($r1['pid]==$r2['pid])
{
/* display the contents */
}

しかし、pidが等しくない場合、何も表示されず、さらに両方が同じペースで増加しない場合、r1のpidの次の結果は23になる可能性がありますが、r2では12になります。何も表示されません。結果が少ないクエリは明らかにフィルターを機能させます。結果を表示しているwhileループの1サイクル内で小さいpidを大きいpidに等しく設定するにはどうすればよいですか? これができれば、私の問題も解決すると思いますか?

どうすればこれを達成できますか?

両方のクエリに共通する結果を表示したいだけです。

PS : これらのクエリは動的に生成されるため、$color または $company のいずれかが空の場合、すべてがテーブルから選択されます。

更新**

r1 はこれを返します

pid  company      color

1    acer          red
3    hp            red
5    logitech      red
6    compaq        red
7    microsoft     red
8    lenovo        red

AND r2 はこれを返します

pid  company       color

5    logitech      red
6    compaq        red
7    microsoft     red
13   nvidia        red

次に、上記の結果から、pid 5、6、7 が r1 と r2 の両方に存在することがわかります。これらの pid に関するすべての列を表示する方法

4

3 に答える 3

2

通常、これは で行いINTERSECTます。ただし、MySQL はサポートしていないためINTERSECT、使用する必要がありますJOIN

SELECT * FROM TABLE1 a WHERE company='$company' INNER JOIN (SELECT * FROM TABLE1 WHERE color='$color') b ON (a.pid = b.pid)

もちろん、ケースが非常に単純な場合は、WHERE 句を追加するだけです。

SELECT * FROM TABLE1 a WHERE company='$company' AND color='$color'

これは、会社または色が選択されているかどうかに基づいて、クエリを動的に作成する方法です。

$q1="SELECT * FROM TABLE1 WHERE 1=1";
if(!empty($company))
{
$q1 .=" AND company='$company'";
}
if(!empty($color))
{
$q1 .=" AND color='$color'";
}

$r=mysqli_query($q1);
于 2013-09-18T11:48:15.977 に答える
1

割り当てられていないときにアプリケーション変数が空白の場合は、2 つの条件すべてのアプリケーション ロジック (アプリ コード内の空白のテスト) を、次の 1 つの単純で洗練されたクエリと組み合わせることができます。

SELECT *
FROM TABLE1
WHERE '$company' IN ('', company)
AND '$color' IN ('', color)

を使用する通常の方法を逆にすることIN (...)で、最小限のコードで空白の場合無視ロジックを取得する方法に注意してください。

于 2013-09-19T03:49:25.600 に答える
1

このクエリをお探しですか?

SELECT *
FROM TABLE1 a
WHERE ('$company' = '' or company='$company') and
      ('$color' = '' or color='$color');
于 2013-09-18T12:01:02.960 に答える