Reputation:
my experience with MYSQL and using JOIN is very limited and now come up against a brick wall.
I have a master table which has lists of products. Each product has multipul attributes like colour, size, brand ( a column/field for each ). Instead of storing the text for each i use a number_id.
1. Yellow
2. Blue
3. Sony
4. Microsoft
5. Green
so for a record i would have
Name, Colour, Brand
Controller, 1, 3 = Controler, Yellow, Sony.
.
SELECT
product_data.id AS id,
product_data.title AS title,
product_data.compatability AS compatability,
product_data.release_date AS release_date,
product_data.colour AS colour,
product_data.brand AS brand,
product_data.type_accessory AS type_accessory,
product_data.created_userinfo AS created_userinfo,
product_data.created_timestamp AS created_timestamp
FROM product_data
INNER JOIN product_attributes
</code>
But im not sure from this point how to change the 'AS colour' to equal the text 'YELLOW' instead of '1'
<code>
[id] => 13413
[title] => Controler
[compatability] =>
[release_date] => 2016
[colour] => 1
[brand] => 3
[type_accessory] => 54
[created_userinfo] => TEST-USER
[created_timestamp] => 1425476393
[category_main_id] => 4
[category_main_description] => Video Game Accessories
[category_sub_id] => 43
[category_sub_description] => Microsoft Xbox One
[colour1] => 1
</code>
I have made the following changes, but i get empty values in the colour.
SELECT
product_data.title AS title,
colours.name AS colour
FROM product_data INNER JOIN colours ON colours.id_colour = product_data.colour WHERE product_data.created_userinfo = 'TEST-USER' ORDER BY title </code> <code> Array ( [0] => Array ( [title] => Controller [colour] => [category_main] => [category_sub] => [brand] => ) [1] => Array ( [title] => Controller Wifi [colour] => [category_main] => [category_sub] => [brand] => ) ) </code>
Upvotes: 0
Views: 49
Reputation: 228
You should keep your attributes in each different table for example:
CREATE TABLE colours(
id_colour int PRIMARY KEY,
name varchar(255)
);
In your main table product_data in a field named colour you should keep an id of a colour. Then you can query like this:
SELECT
product_data.id AS id,
product_data.title AS title,
product_data.compatability AS compatability,
product_data.release_date AS release_date,
colours.name AS colour
FROM product_data
INNER JOIN colours ON colours.id_colour = product_data.colour
PS. You can leave table name in a query if there isn't a conflict in column name.
SELECT
id AS id,
title AS title,
compatability AS compatability,
release_date AS release_date,
name AS colour
FROM product_data
INNER JOIN colours ON colours.id_colour = product_data.colour
EDIT:
Remember that fields product_data.id_colour and colours.id_colour must have the same data type -> int.
Upvotes: 1
Reputation: 113
You have to define a table called colour with columns id and name, then your query will look like:
SELECT
product_data.id,
product_data.title,
colour.name AS colour
FROM product_data
INNER JOIN colour ON colour.id = product_data.colour
Upvotes: 0