user4367185
user4367185

Reputation:

MYSQL Link, Joining two tables

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

Answers (2)

czeski
czeski

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

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

Related Questions