简体   繁体   中英

Projecting mySQL database, how to deal with multiple categories

I need a help with projecting my database. The purpose of this database will be to show offers in different categories. There are 1-6 categories to each item. There are around 80 categories types, so I decided to make three tables as below:

table1:

ID  Item_id
1   1
2   2
3   3
4   4
5   5

table2:

ID Item_id Category
1   1      cat55
2   1      cat56
3   1      cat57
4   1      cat58
5   2      cat42
6   2      cat43
7   2      cat44
8   2      cat45
9   3      cat42 
etc.

table3:

Category_id  category_name
cat55        apples
cat56        oranges
cat57        bananas
cat58        pineapples

Am I doing this right? I've got a problem to make proper sql query to show my categories in php, because when I use this query:

    SELECT table1.*, table2.*, table3.*
       FROM table1
       INNER JOIN table2
       ON table1.item_id = table2.item_id
       INNER JOIN table3
       ON table2.category=table3.category_id

It only gives me the first category name, when I need all of them and show them like this:

Item 1: apples, oranges, bananas, pineapples
Item 2: cat42, cat43, cat44, cat45
Item 3: cat42

What am I doing wrong? Is it wrong query or I need to change the database structure to like this

table 1 and 3 unchanged

table 2:
ID Item_id  c1      c2      c3      c4      c5      c6  
1   1       cat55   cat56   cat57   cat58   null    null
2   2       cat42   cat43   cat44   cat45   null    null
3   3       cat42   null    null    null    null    null

I'm using foreach loop, so I can do only one query, I know that more queries are possible, but I need to make it as simple as possible.

If you want to fetch all names in single row for each item, following query will work:

SELECT table1.Item_Id,Group_Concat(t3.category_name separator ',') as Category_Name
       FROM table1
       INNER JOIN table2
       ON table1.item_id = table2.item_id
       INNER JOIN table3
       ON table2.category=table3.category_id
Group by table1.Item_Id;

I don't find any problem in your DB Structure.

Hope it helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM