php - 如何使用sql JOIN查询显示多个表中的所有数据?

标签 php mysql

我有以下 Mysql 表:

1) 产品
2) 产品图片
3) 产品日期时间
4) 产品菜单
5) 厨师简介

我需要将这 5 个表中的所有数据显示到名为 menu-details.php 的页面

所有表都有外键作为products表id的p_id,并且某些表具有相同p_id的多个数据>。

为了完成此任务,我使用以下 mysql 连接查询:

$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 "

之前对您可以使用的 $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 . ";"

关于php - 如何使用sql JOIN查询显示多个表中的所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466725/

相关文章:

php - 如何使用一个插入语句插入多个项目,同时检测唯一列是否具有重复值?

php - 虚拟主机 - 全部重定向到 WAMP 本地主机 'home' 页面

php - 如何最好地从带有 php 和 mysql 的分数表中获取某人的 'rank' 而无需循环

mysql - 连接单独的数据库时使用的连接变量?

mysql - MySQL如何知道一个段落包含多少个单词?

mysql:/usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (mysql 需要)

php - 使用 Div 显示 MySql 数据

php - 好的php mysql密码散列

php - 使用 Codeigniter 发送邮件

Mysql cli 不在 crontab 运行的 bash 脚本中返回数据