2012-04-24 3 views
2

に等しい場合、MySQLを選択:のみすべてのサイズは、私はいくつかのMySQLのテーブル持っ0

`items` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `cat_id_p` int(11) NOT NULL, 
    `cat_id` int(11) DEFAULT NULL, 
    `brand_id` int(11) DEFAULT NULL, 
... 
) 

`items_sizes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `item_id` int(11) NOT NULL, 
    `size_id` int(11) NOT NULL, 
    `count` int(11) DEFAULT '1', 
... 
) 

を、私は、少なくとも> 1

を数えるだけ持ってitems_sizes.count < 1とないアイテムを持っているアイテムを選択する必要がありますここで

はSQLクエリです:

SELECT 
    DISTINCT `items`.* 
FROM 
    (`items2`) 
    LEFT JOIN `items_sizes` ON items_sizes`.`item_id` = `items`.`id` 
WHERE ... 
    AND `items_sizes`.`item_id` = items.id 
    AND `items_sizes`.`count` < 1 
GROUP BY `items`.`id` 
ORDER BY `items`.`id` desc 
LIMIT 30 

しかし、それは動作しません...文の場合、私は必要なことができますか?


SOLVED! JUST SUMとし、あなたのFROM句でテーブル名items2を想定し

SELECT DISTINCT `items`.*, sum(items_sizes.count) 
FROM (`items`) 
LEFT JOIN `items_sizes` ON `items_sizes`.`item_id` = `items`.`id` 
WHERE ... 
GROUP BY `items`.`id` 
having sum(items_sizes.count)=0 
ORDER BY `items`.`id` desc LIMIT 30 

答えて

0

を有するタイプミスですかitems.*はタイプミスで、items2.*でなければなりません...

あなたは何の集約関数(SUM(), COUNT(), AVG())を持っていません、したがって、GROUP BYの必要はありません。 JOINで使用されているON句とWHERE句が混在しているようです。最初WHERE条件は存在しないはずです。私たちは見ていないあなたのWHERE句(WHERE ...)の一部が、ここにも重要であるかもしれないことを

SELECT 
    DISTINCT items2.* 
FROM 
    items2 
    LEFT JOIN items_sizes ON items2.id = items_sizes.item_id 
WHERE ... 
    AND items_sizes.count < 1 
ORDER BY items2.id desc 
LIMIT 30 

注...

LEFT JOINは、おそらくですとにかくLEFT JOINが戻ってきたNULLの値を排除するため、items_sizes.count < 1JOINになる可能性があります。

+0

items2 - はい、申し訳ありません。 – mindsupport

+0

@mindsupportすべてが上記の 'items2'に変更されました。 –

0
SELECT 
    DISTINCT * 
FROM 
    `items` 
WHERE 
    NOT EXISTS (
    SELECT * FROM `items_sizes` 
    WHERE 
      `items_sizes`.`item_id` = `items`.`id` 
     AND `items_sizes`.`count` > 0 
) 
    -- ... 
ORDER BY `id` desc 
LIMIT 30 
関連する問題