2016-07-08 15 views
0

Ich versuche, eine Volltextsuche für products.desc zu erstellen. Als Antwort möchte ichHolen Sie min() aus einer anderen Tabelle mit mehreren Beziehungen

  • Produkte: id, ab
  • Preise: Die niedrigste Preis-Reihe in Bezug auf Products.ID
  • Lieferanten: ID, Name des Anbieters, dass der Preis anbietet.

Ich bin derzeit mit

SELECT products.id, MIN(prices.price) as prices_price, prices.id as prices_id, products.desc, products.product_number, prices.supplier_id, suppliers.name FROM products 
INNER JOIN prices 
ON prices.product_id = products.id 
INNER JOIN suppliers 
ON prices.supplier_id = suppliers.id 
WHERE 
MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE) 
GROUP BY prices.product_id 

Dies ist die richtige (niedrigsten) Preis Rückkehr, obwohl der Wert für alle anderen Preise. * - Zeilen Unbekannt/falsch ist. Seit GROUP BY prices.product_id holt die Spalten/Zeilen mit der niedrigsten ID.

Products 
    id | desc 
    ---------------------------------------- 
    1 | product_1 
    2 | product_2 


    Prices 
    id | product_id | price | supplier_id 
    ------------------------------------------------ 
    1 | 1   | 100 | 1 
    2 | 1   | 150 | 2 
    3 | 2   | 200 | 2 
    4 | 2   | 250 | 1 

    Suppliers 
    id | name 
    ------------------------------------------------ 
    1 | Supplier1 
    2 | Supplier2 

Antwort

2

Sie müssen den niedrigsten Preis erhalten, indem Sie auf einer Unterabfrage die Preise gruppieren und den niedrigsten Preis und die entsprechende product_id zurückgeben.

Dann wieder in der Preistabelle, um den Datensatz des niedrigsten Preises zu erhalten.

Verwenden Sie dann die supplier_id des Datensatzes mit dem niedrigsten Preis, um dem Lieferanten beizutreten.

Fiddle

SELECT 
    products.id, 
    lowestPrice.price, 
    prices.id AS prices_id, 
    products.desc, 
    prices.supplier_id, 
    suppliers.name 
FROM 
    products 
INNER JOIN (
    SELECT 
     prices.price, 
     prices.product_id 
    FROM 
     prices 
    GROUP BY 
     product_id 
    HAVING 
     MIN(prices.price) 
) AS lowestPrice ON lowestPrice.product_id = products.id 
INNER JOIN prices ON prices.price = lowestPrice.price AND prices.product_id = lowestPrice.product_id 
INNER JOIN suppliers ON prices.supplier_id = suppliers.id 
WHERE 
MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE) 
+0

Thx, Obwohl es zurück: '# 1111 - Ungültige Verwendung von Gruppe function'? –

+0

ah Entschuldigung, es zu beheben – Philipp

+0

Ich fürchte, es funktioniert nicht. Diese Abfrage ruft alle Zeilen ab, die mit der Suchabfrage übereinstimmen. Auch es gruppiert sich nicht. Ich lese diese Suche, obwohl es nicht viel geholfen hat ..: http://stackoverflow.com/questions/12561774/mysql-fetching-lowest-value –