簡體   English   中英

如何在PHP中加入多個MySQL查詢

[英]how to join multiple mysql query in php

我有一個類別標簽

parent_cat  cat_id title
0             1   fruit
0             2    vehicle
0             3    goods
1             4    sour
1             5    sweet
1             6    mixed
2             7    sedan
2             8     hatchback
2             9     car

和產品表

offer_name parent_cat sub_cat
mango         1        4,6
maruti        2        7,8,9
apple         1        5,4

我想根據請求的get參數加入表,如果?title = fruit,那么我將得到芒果,蘋果,而我的sql查詢是

SELECT category.cat_id,category.title,product.parent_cat,product.offer_name 
FROM category, product 
WHERE category.cat_id=product.parent_cat 
AND category.title='fruit' --requested get variable

output is :  cat_id  title  parent_cat  offer_name
               1     fruit      1          mango
               1     fruit      1          apple

如果?title = sour,那么我會得到芒果,蘋果,而我的sql查詢是

SELECT * FROM product WHERE CONCAT(',' , sub_cat , ',') LIKE '%,4,%'

output is : offer_name parent_cat  sub_cat
                mango     1           4,6
                 apple    1           4,5

我的問題是如何轉換為'%,4,%'的id為4的sour,以便我可以將get變量放在那。如何像第一個mysql查詢一樣加入

如果產品屬於多個類別,則表中應該有多行。 這是多對多的關系。 並且您的sql應該是(...)中的SELECT * FROM product WHERE sub_cat

答案是:您不能。

MySQL無法處理以逗號分隔的列表。 您基本上有兩個選擇:

#1進行兩次查詢

基本上像您的示例一樣,首先獲取cat_id ,然后進行第二個查詢。 但是那樣的話,您就不必回避LIKE '%,4,%'

#2做到關系數據庫的方式。

如user3642242所述,您具有多對多關系。 在這種情況下,通常在SQL中您將使用另一個關系表。 因此,您將擁有一個categoryproductcategory_product_relationship表。 您的category_product_relationship表將如下所示:

category_id  product_id
1            1
1            3
2            2
...          ...

這意味着product表需要一個索引,無論如何這都是一個好主意,因為SQL喜歡主鍵並且使用它們超級快。

然后,您可以執行JOIN來查詢您的產品,如下所示:

SELECT *
FROM category c
JOIN category_product_relationship r ON r.category_id = c.cat_id
JOIN product p ON p.id = r.product_id
WHERE c.title = 'sour'

(c,r和p是別名)

然后,您可以從product表中刪除parent_catsub_cat列,並通過關系表處理所有這些列。

正如其他人所建議的那樣,您應該考慮以適當的關系方式重新設計數據庫。 但是可以通過以下查詢獲得所需的內容:

SELECT offer_name, parent_cat, sub_cat FROM product JOIN
(SELECT cat_id FROM category WHERE title = 'sour') AS temp ON
CONCAT(',',sub_cat,',') LIKE CONCAT('%,',temp.cat_id,',%')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM