2011-01-14 10 views
1
SELECT * 
FROM `SC_products` 
WHERE `productID` 
IN (
    (
     SELECT `productID` 
     FROM `SC_product_options_set` 
     LEFT JOIN `SC_products_opt_val_variants` ON `SC_product_options_set`.`variantID` = `SC_products_opt_val_variants`.`variantID` 
     WHERE `SC_products_opt_val_variants`.`optionID` = '14' 
     GROUP BY `SC_product_options_set`.`productID` 
     ORDER BY `SC_products_opt_val_variants`.`sort_order` ASC 
    ) 
    UNION ALL 
    (
     SELECT `productID` 
     FROM `SC_product_options_values` 
     WHERE `SC_product_options_values`.`optionID` = '14' 
     ORDER BY `SC_product_options_values`.`option_value_ru` ASC 
    ) 
) 
GROUP BY `SC_products`.`productID` 
LIMIT 0 , 30 

Fehler №1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe verwenden 'UNION ALL (SELECT productID FROM SC_product_options_values WHERE `SC_produ' in Zeile 7MySQL - Fehler in Ihrer SQL-Syntax (WHERE IN UNION)

Bitte Hilfe.

Antwort

1

Versuchen:

SELECT * 
FROM `sc_products` 
WHERE `productid` IN (
        SELECT `productid` 
         FROM `sc_product_options_set` 
           LEFT JOIN `sc_products_opt_val_variants` 
           ON `sc_product_options_set`.`variantid` = 
            `sc_products_opt_val_variants`.`variantid` 
         WHERE `sc_products_opt_val_variants`.`optionid` = '14' 
         GROUP BY `sc_product_options_set`.`productid` 
         UNION ALL 
         SELECT `productid` 
         FROM `sc_product_options_values` 
         WHERE `sc_product_options_values`.`optionid` = '14' 
              ) 
GROUP BY `sc_products`.`productid` 
LIMIT 0, 30 

P. S: Sie keine ORDER BY in Unterabfrage müssen becuase es in einer IN-Klausel

+0

Danke, Cybernate. Ich werde es versuchen. – lysenkobv

+0

Cybernate, respektiere dich. Es funktioniert wirklich! – lysenkobv

0

IIRC, müssen Sie setzen die ORDER-Klausel außerhalb der Abfragen, die Sie zusammen verbinden, und wenn Sie dies tun, müssen Sie sicherstellen, dass Sie diese Spalten in jeder der zu UNION-bezogenen Abfragen auswählen, so dass Sie sie bestellen können, sobald Sie es bekommen haben Ihr vollständiges Recordset

Danach müssen Sie diese Ergebnisse in eine andere SELECT-Schicht umbrechen, damit Ihr IN-Vergleich funktioniert.

diese
+0

Dank ist, werde ich versuchen. – lysenkobv

+0

Ich versuche, diese (ohne GROUP und ORDER in UNION): SELECT * FROM ' SC_products' WHERE' productID' IN ( ( SELECT 'productID' FROM' SC_product_options_set' LEFT JOIN 'SC_products_opt_val_variants' ON' SC_product_options_set '.'variantID' =' SC_products_opt_val_variants'.'variantID' WHERE 'SC_products_opt_val_variants'.'optionID' = '14' ) UNION ALL ( SELECT' productID' FROM 'SC_product_options_values' WHERE' SC_product_options_values'.' optionID' = '14' ) ) GROUP VON 'SC_products'.productID' LIMIT 0, 30 Aber ich habe immer noch das Problem in der gleichen Zeile – lysenkobv

+0

Was ich normalerweise tun, wenn ich versuche, diese Art von Dingen zu debuggen, ist jedes meiner inneren laufen fragt unabhängig voneinander ab, ob ihre Syntax und Zusammensetzung korrekt ist. Sobald ich mir meiner Komponenten sicher bin, sind Probleme, die ich beim Zusammenstellen habe, viel leichter zu lösen. Es sieht so aus, als ob Sie @Cybernate hier behandelt haben, aber für den Fall, dass Sie in Zukunft solche Probleme haben, könnte diese Debugging-Technik Ihnen in der Zukunft einige Schmerzen ersparen. =) –