I have two MySQL tables:
- attributes (attributeid, name)
- productsattributes (productid, attributeid, displayvalue)
The required is for each attribute name called “Product Type” get all other attributes associated with this “Product Type”. As an example — attributes table will look like:
attributeid name
1 A
2 B
3 Product Type
4 D
productsattributes table will look like:
productid attributeid displayvalue
1 3 FAN
1 1 Brown
1 2 Stand
2 3 FAN
2 4 D
3 3 CAR
3 4 imported
So the final result should be:
FAN (A,B, Product Type,D)
CAR (Product Type, imported)
Here is my try:
- first I get all the “displayvalues” from productattributes:
SELECT DISTINCT displayvalue
FROM productsttributes
WHERE attributeid = 3;
- then I loop through each “displayvalues” to find the other attributes:
SELECT a.name
FROM attributes a
INNER JOIN productsattributes pa
ON pa.attributeid = a.attributeid AND productid in (
SELECT productid
FROM productsttributes
WHERE dispalyvale = '$displayvalue')
ORDER BY a.name;
The problem is the productattributes table has about 7 million rows, so my script is taking forever .. of course I am not looking for 10 minutes solution but at least it will improve my queries a bit.
I would start with the following statements:
This will make sure all important fields are indexed.
The query might look like this (also on SQL Fiddle):
Please, kindly include the
EXPLAINoutput of your’s and this queries into your question.