2

テーブルが 2 つあります。プロフィールと請求書。プロファイルは、すべてのメンバーが含まれるメイン テーブルです。次に、これらの人々の何人かは請求書を持っています(個人は請求書を持っていないか、1 つまたは複数の請求書を持っている可能性があります)。請求書テーブルには、プロファイル内の関連 ID にリンクする「profileid」フィールドがあります。請求書テーブルには、「支払済み」または「未払い」のいずれかを示す「支払済み」という名前のフィールドがあります。

それが明確であることを願っています

これで、すべてのプロファイルを検索できる検索ページができました。2 つのチェックボックスがあるので、支払い済みの請求書と未払いの請求書をすべてフィルタリングできます。

個別には正常に機能しますが、一緒には機能しません。つまり、支払い済みの請求書のボックスにチェックを入れると、これまでに請求書を支払ったすべてのプロファイルが表示され、未払いにチェックを入れると、未払いの請求書を持つすべての人が表示されます。しかし、両方のボックスにチェックを入れると、結果は 0 になります。

ここに私のカウントクエリがあります:

$query = "SELECT COUNT(DISTINCT profiles.id) AS num FROM profiles 
LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
AND (invoices.paid='Paid' OR invoices.paid='Unpaid')
WHERE
(
IFNULL(invoices.paid, '') LIKE '$paid%' 
AND IFNULL(invoices.paid, '') LIKE '$unpaid%' 
);

これに何年も費やし、それを機能させることができません。どんな助けも大歓迎です。ありがとう

4

2 に答える 2

1

AND同時に未払いの支払いがあるかどうかを確認します。明らかに、両方になることはありません。

両方のオプションが選択されている場合は、このチェックを使用するORかスキップする必要があります。

于 2013-06-04T19:38:29.620 に答える
0
SELECT COUNT(DISTINCT profiles.id) AS num FROM profiles 
LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
AND (invoices.paid='Paid' OR invoices.paid='Unpaid')
WHERE
IFNULL(invoices.paid, '') LIKE '$paid%' 
OR IFNULL(invoices.paid, '') LIKE '$unpaid%'

しかし、まったく別のことは、(上記のような) 補間変数を使用してはならないということです。適切な値を選択するため$paidに使用しなければならないのは奇妙だと思います。LIKE '[...]%'データベース スキーマの状態が悪いようです。

于 2013-06-04T19:36:33.880 に答える