2

私のMySQLクエリは重複したエントリを作成し続けます。それは私の結合値またはID値に関係していると思います。私は初めてで、かなり単純なフィルターJOINを実行しようとしています。JOIN

基本的に私は商品リストページで商品をフィルタリングしています。

newCatCols

+----+-----------------+-------------+
| id | sku             | name        |
+----+-----------------+-------------+  
|  1 | 670_apple       | Black       |
|  2 | 670_apple       | Apple       |
|  3 | 670_apple       | Blush       |
|  4 | 670_apple       | Turquoise   |
|  5 | 670_apple       | Light Coral |
| 10 | 640_apple_black | Apple_Black |
| 22 | 347_blush       | Lime        |
| 33 | 347_blush       | Turquoise   |
| 44 | 347_blush       | Gray        |
| 55 | 347_blush       | Yellow      |
+----+-----------------+-------------+

newCatProds

+----+-----------------+--------+------+
| id | sku             | cost   | cat  |
+----+-----------------+--------+------+    
|  1 | 670_apple       | 489.55 | swar |
| 10 | 640_apple_black | 458.99 | swar |
| 22 | 347_blush       | 741.44 | sig  |
+----+-----------------+--------+------+    

カスタムが黒を選択した場合、黒、Apple_Black、Appleで色を返すようにします。ただし、リストを複製するだけです。

// productslisting.php?cat=swar&filter=Black
$strColourGet=mysql_real_escape_string($_GET["filter"]);
$strCatGet=mysql_real_escape_string($_GET["cat"]);  

if($strColourGet=="Black"){

$checkSQL=mysql_query("
SELECT * FROM `newCatProds`
INNER JOIN `newCatCols`
ON `newCatProds`.`sku` = `newCatCols`.`sku`
WHERE (
    `name` = 'Black' OR
    `name` = 'Apple' OR
    `name` = 'Apple_Black' 
)
AND `status`='1' AND `category` = '".$strCatGet."'
ORDER BY `newCatProds`.`rank` DESC");

}

ただし、結果は2回表示されます。どういうわけかそれを2回表示させないことはできますか?

710     702_appleblack  139         sig     0   8   1   1   1243    702_appleblack  Apple_Black
486     613_turq    139         sig     0   124     1   1   695     613_turq    Black
463     379_sapphire2   139         sig     0   46  1   1   652     379_sapphire2   Black
504     670_apple   119         sig     0   176     1   1   607     670_apple   Black
463     379_sapphire2   139         sig     0   46  1   1   658     379_sapphire2   Apple_Black

それで多分グループ?それで、379_sapphire2両方が入っているので、一度だけ表示する必要がありますか?

4

1 に答える 1

1

これらはすべて明確な結果です。それらをもっとよく見てください。

これを回避したい場合SELECT * FROMは、特定のフィールドのリクエストを行う代わりに.

回答を 1 つだけ取得するには、select でそのフィールドを個別として指定し、group_by 句を作成する必要があります。*選択パラメーターを使用してグループを作成することはできません。

PS: クエリを次のように書き直すことをお勧めします。次のようにすると理解しやすいです。

SELECT
    DISTINCT( category )
FROM
    newCatProds p
JOIN
    newCatCols c
ON
    p.sku = c.sku
WHERE
    c.name IN ( 'Black', 'Apple', 'Apple_Black' )
    AND status =  1
    AND category = '" . $strCatGet . "'
GROUP BY
    category
ORDER BY
    p.rank DESC;
于 2012-10-17T09:25:49.577 に答える