Php 从具有多个关系的表中获取结果的单个SQL查询
我有一个名为IMAGES的表,其中有一个属性namePhp 从具有多个关系的表中获取结果的单个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
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用作我的主键