簡體   English   中英

如何使用sql JOIN查詢顯示來自多個表的所有數據?

[英]How to show all data from multiple table using sql JOIN query?

我有以下Mysql表:

1)產品
2)product_images
3)product_date_time
4)product_menu
5)Chef_profile

我需要將所有數據從這5張表顯示到名為menu-details.php的頁面

所有表都具有作為products表ID的p_idforeign key ,而某些表具有相同p_id多個數據。

為了做到這一點,我正在使用以下mysql join查詢:

$query = mysqli_query($conn, "SELECT p.p_id, p.p_title, p.p_description,

p.p_price, p.p_availability, p.delivery_option, p.event_location,

pimg.p_large_image, pimg.p_small_image, pdt.date, pm.p_menu_title, 

pm.p_menu_description, pm.p_menu_price, pm.p_menu_availability, chef.fname, 

chef.lname, chef.chef_details FROM products as p LEFT JOIN product_images as 

pimg ON p.p_id = pimg.p_id LEFT JOIN product_date_time as pdt ON pdt.p_id = 

p.p_id LEFT JOIN product_menu as pm ON pm.p_id = p.p_id LEFT JOIN 

chef_profile AS chef ON chef.u_id = p.u_id WHERE p.p_id =  '$mid' ") or 

die('wrong query');

為了顯示數據,我正在使用以下php代碼:

$result = mysqli_fetch_array($query);        
$menu_title =  htmlspecialchars($result['p_title']);

我的問題

  1. 我應該使用5個唯一的sql查詢將數據顯示到該menu_details.php頁面嗎?

  2. 現在,此查詢顯示的是來自那些表的單個記錄,該記錄具有多個具有相同p_id數據。 我需要顯示具有相同p_id和多個數據的所有數據。 我怎樣才能做到這一點 ?

  3. 例如: product_images表中有以下數據:

     pimg_id p_large_image p_id u_id 1 name 203 25 1 name 204 26 1 name 204 25 1 name 205 27 1 name 205 28 

因此,如果我使用php while循環,它將顯示該表中的所有數據,但是應該基於p_id顯示所有數據,例如p_id = 204

while($result = mysqli_fetch_array($query)) {
    echo $menu_l_image = htmlspecialchars($result['p_large_image']);
    echo '<br/>';
} 

如果p.id是整數,則刪除單引號形式$ mid

"SELECT 
    p.p_id, 
    p.p_title, 
    p.p_description,
    p.p_price, 
    p.p_availability, 
    p.delivery_option, 
    p.event_location,
    pimg.p_large_image, 
    pimg.p_small_image, 
    pdt.date, 
    pm.p_menu_title, 
    pm.p_menu_description, 
    pm.p_menu_price, 
    pm.p_menu_availability, 
    chef.fname, 
    chef.lname, 
    chef.chef_details 
    FROM products as p 
    LEFT JOIN product_images as pimg ON p.p_id = pimg.p_id 
    LEFT JOIN product_date_time as pdt ON pdt.p_id = p.p_id 
    LEFT JOIN product_menu as pm ON pm.p_id = p.p_id 
    LEFT JOIN chef_profile AS chef ON chef.u_id = p.u_id 
    WHERE p.p_id =  $mid "

previus對可以使用的$ mid var進行適當的消毒

"SELECT 
    p.p_id, 
    p.p_title, 
    p.p_description,
    p.p_price, 
    p.p_availability, 
    p.delivery_option, 
    p.event_location,
    pimg.p_large_image, 
    pimg.p_small_image, 
    pdt.date, 
    pm.p_menu_title, 
    pm.p_menu_description, 
    pm.p_menu_price, 
    pm.p_menu_availability, 
    chef.fname, 
    chef.lname, 
    chef.chef_details 
    FROM products as p 
    LEFT JOIN product_images as pimg ON p.p_id = pimg.p_id 
    LEFT JOIN product_date_time as pdt ON pdt.p_id = p.p_id 
    LEFT JOIN product_menu as pm ON pm.p_id = p.p_id 
    LEFT JOIN chef_profile AS chef ON chef.u_id = p.u_id 
    WHERE p.p_id = ". $mid . ";"

暫無
暫無

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

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