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

Php 从具有多个关系的表中获取结果的单个SQL查询,php,mysql,sql,Php,Mysql,Sql,我有一个名为IMAGES的表,其中有一个属性nameimg_ID,它是主键 还有另一个名为“收藏夹”的表,其中有两个属性“img\u ID”和user\u IDimg\u ID作为图像的外键,user\u ID作为用户的外键 现在我需要来自收藏夹的所有img\u IDs的from图像的详细信息,其中user\u ID是一些x值 我可以这样做,b.t.w我正在使用PHP和mySQL $gett = mysql_query("SELECT img_ID FROM favorites WHERE us

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

还有另一个名为“收藏夹”的表,其中有两个属性“img\u ID”和
user\u ID
img\u ID
作为图像的外键
user\u ID
作为用户的外键

现在我需要来自收藏夹的所有
img\u ID
s的
from图像的详细信息,其中
user\u ID
是一些x值

我可以这样做,b.t.w我正在使用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>
选择
一,*
从…起
收藏夹f
在f.img\u id=i.img\u id上连接图像i
哪里
f、 用户id=

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

无循环,只需查询两个表即可

SELECT i.*   -- possibly would need to be "SELECT DISTINCT i.*" instead
FROM images AS i
    INNER JOIN favorites AS f
        ON f.img_ID = i.img_ID
WHERE f.user_ID = ???
SELECT 
    images.*
FROM
    images
INNER JOIN
    favorites
ON
    favorites.img_ID = images.img_ID
WHERE
    favorites.user_ID = X

您的查询有一些错误,我建议使用PDO而不是mysqli。每一个主要的PHP ORM都是基于它构建的,这是因为它的语法是准确的,还是我需要放一些东西来代替i&f@Dan格罗斯曼-“一些错误”=“一个字母的打字错误”。但是谢谢,修好了。我不太会使用PHP,所以我会在PDO上听从您的意见,但这两种方法都比直接的
mysql\u查询好,您需要尝试理解查询以及它在做什么。盲目复制和粘贴他人的工作无助于您学习编写下一个查询。如果你想学习的话,我强烈推荐《简单SQL》一书。这本书充满了例子,很容易理解。@Junaid Saeed-就是这样
i
f
是表别名,在
from
子句中定义。
as
关键字是可选的。DISTINCT没有任何用处,因为在收藏夹表中,元组img\u ID和user\u ID用作我的主键