php - 单个 SQL 查询从具有多对多关系的表中获取结果

标签 php mysql sql

我有一个名为IMAGES的表,其中属性名称img_ID主键

还有另一个名为收藏夹的表,其中有两个属性'img_ID'和user_ID ... img_ID用作>图像的外键user_ID充当用户的外键

现在我需要来自收藏夹IMAGES所有img_ID的详细信息,其中user_ID是< em>x 值

我可以这样做,顺便说一句,我正在使用 PHP 和 mySQL

$gett = mysql_query("SELECT img_ID FROM favorites WHERE user_ID='".$variable."'");

if( mysql_num_rows($gett) > 0 )
{
  while( $steps = mysql_fetch_assoc($gett) )
  {
     $res = mysql_query("SELECT * FROM images WHERE img_ID='".$steps['img_ID']."' ORDER BY img_Date");

         if( mysql_num_rows($res) > 0 )
         {
            while( $result= mysql_fetch_assoc($res) )
            {
               echo $result['img_Name'];
               echo $result['img_Desc'];
               echo $result['img_ext'];
            }
         else 
            echo "no images were found";
  }
}
else 
  echo "no favorites were found";

伪代码就像

RUN QUERY
for each img_ID where user_ID is this
    RUN QUERY    
    for each img_ID
        perform DISPLAY

这种方法有一个缺陷和一个缺点

缺陷      = 带有时间戳的订单被破坏

back-draw = 嵌套循环中有一个查询..

问题:这一切都可以通过查询来完成吗?如果是,那么如何?

最佳答案

使用连接:

select
  i.*
from
  favorites f
  join images i on f.img_id = i.img_id
where
  f.user_id = <user id>

另外,将您的代码更改为使用 mysqli以及带有绑定(bind)变量的准备语句,以提高性能并消除 SQL 注入(inject)攻击的威胁。

关于php - 单个 SQL 查询从具有多对多关系的表中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241561/

相关文章:

php - instr() 查询不工作

php - Laravel Eloquent,按月/年分组

c# - 如果两个字段不匹配,则将新行插入数据库表,否则在特定列中求和值

mysql - 仅显示 MySQL 数据库模式上已填充表的列表

mysql - 更改 IP 地址后由于 DEFINER 错误无法更改 MySQL 功能

javascript - 有没有办法使用ajax重定向到新页面,并将响应也发送到新页面

php - 如何确保随机选择的两行彼此不同?

php - 如何阻止用户伪造请求?或者如何检测虚假请求?

PHP:从查询结果发送批量电子邮件

mysql - 使用相同打开的连接插入超过 50 个查询