2012-03-28 5 views
0

私はストアで私のデータベースのすべての取引を "グループ化"します。クエリ後にグループ化しなかった他のすべての取引を表示するにはどうすればよいですか?グループの後に他のすべての結果を表示する方法

これは私が使用しているクエリです:

$query = mysql_query("SELECT * FROM deals WHERE DATE_FORMAT(expiration_date,'%Y-%m-%d %H:%i:%s') >= NOW() $cat ORDER BY deal_id ASC") or die(mysql_error()); 
+0

クエリ内の '$ cat'の値は何ですか? – safarov

+0

$ catではカテゴリを定義できます。私が考える質問にとっては重要ではない。 \t '$ geef = $ _GET ['categorie']; \t $ cat = "AND cat1 like '%$ geef%'"; ' – Nathaniel

+0

あなたのテーブル構造は何ですか?テーブルにデータのサンプルを含めることと、結果をどのように見えるようにするかは良い考えです。 – nnichols

答えて

0

をわずかに異なるのノートでは、日付に基づいてレコードを取得するには、このようなクエリが悪いです。

SELECT * 
FROM deals 
WHERE DATE_FORMAT(expiration_date,'%Y-%m-%d %H:%i:%s') >= NOW() 
AND cat1 LIKE '%$geef%' 
ORDER BY deal_id ASC 

有効期限の形式は何ですか。あなたがDATE_FORMATに渡しているとすれば、それはDATEまたはDATETIME型であると仮定します。 expiration_dateをDATE_FORMATにラップすると、オプティマイザはそのフィールドのインデックスを使用できず、フルテーブルスキャンを強制します。これは悪いニュースです!

あなたはDATE_FORMAT削除しても同じ結果が得られます -

SELECT * 
FROM deals 
WHERE expiration_date >= NOW() 
AND cat1 LIKE '%$geef%' 
ORDER BY deal_id ASC 

、今オプティマイザは、インデックスの最初のフィールドとしてEXPIRATION_DATE含まれているインデックスを使用することができるようになります。

cat1というフィールドがあるという事実は、あなたが他のカテゴリフィールドを持っていると思うようになります。再び、これは悪いニュースです。列をまたいでグループを繰り返すことはあなたの友人ではありません。彼らはあらゆる種類のものを必要以上に難しくし、効率的ではありません。 First Normal Formでこの記事を読んでください。

関連する問題