2015-02-06 25 views
0

我有一個列的產品表(prodCat)這是一個ID列號,這涉及到另一個表我有設置(rangecat)鏈接到一列(rangeCatID)。如何僅從SQL表中顯示一個類別?

我的代碼如下:

<?php 
    $querycat = "SELECT DISTINCT products.prodCat, rangecat.rangeCatTitle, rangecat.rangeCatSEO FROM products INNER JOIN ranges ON products.prodRangeID = ranges.rangeID INNER JOIN rangecat ON products.prodCat = rangecat.rangeCatID WHERE rangeSEO = '$seoname' AND prodState = 1"; 
     $resultcat = $conn->query($querycat); 

     while($rowcat = $resultcat->fetch_object()){ 
     if ($page[3] == $rowcat->rangeCatSEO) { $state = ' class="onstate"'; } else { $state = ''; } 
     echo '<li ' .$state. '><a href="/product/' . $prodsub .'/'. $rowcat->rangeCatSEO . '">' . $rowcat->rangeCatTitle . '</a></li>'; 
     } 

     $resultcat->free(); 
?> 

請看下面的截圖下面這顯示分類多次返回:

enter image description here

請參閱下面的產品表結構:

enter image description here

請參閱下面的rangecat表結構: enter image description here

回答

1

鑑於您的查詢相關的表,那麼「副本」來自一個事實,即有與其他表中其它行的類別表相關行。

如果只想獲得唯一行,則必須使用select distinctgroup by。我會跟select distinct去:

SELECT DISTINCT category -- Or the appropriate column name 
FROM products 
    INNER JOIN ranges ON products.prodRangeID = ranges.rangeID 
    INNER JOIN rangecat ON products.prodCat = rangecat.rangeCatID 
-- Add where conditions here 

一旦你得到了獨特的類別,您可以創建第二個語句,以獲得產品的每一個獨特的類別。

希望這會有幫助

+0

非常感謝你,它的工作原理如你所說的100%正確。 – Craig 2015-02-06 20:00:34

+0

這非常有效,它輸出類別ID並且只顯示一次類別。 現在我現在的問題是我試圖從(rangecat)表中獲取(rangeCatTitle),但是這不會返回任何結果? – Craig 2015-02-09 12:19:14

+0

@Craig:考慮這一點:如果你想讀取它,你*需要*在查詢中包含該列;如果每個類別有多個'rangeCat'值,則會再次重複行。仔細想想如何以您想要的方式獲取數據。另一方面,您不會發布表結構或任何數據樣本,因此無法知道您的數據如何組織。 – Barranka 2015-02-09 16:37:44

相關問題