我有一个名为 IMAGES 的表格,其中有属性名称img_ID
,即主键,
还有另一个名为收藏夹的表格,其中有两个属性'img_ID'& user_ID
... img_ID
用作图片的外键,user_ID
用作外键给用户
现在我需要来自收藏夹的所有img_ID
的图片的详细信息,其中user_ID
是 x-value < / em>的
我可以这样做,b.t.w我正在使用PHP&amp; 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";
PSEUDO CODE就像
RUN QUERY
for each img_ID where user_ID is this
RUN QUERY
for each img_ID
perform DISPLAY
这种方法有一个缺陷&amp;反抽奖
FLAW =时间戳上的订单被销毁
back-draw =在嵌套循环中有一个查询..
问题:这一切都可以通过查询完成吗?如果是,那么如何?
答案 0 :(得分:2)
使用联接:
select
i.*
from
favorites f
join images i on f.img_id = i.img_id
where
f.user_id = <user id>
此外,将代码更改为使用mysqli和带有绑定变量的预处理语句,以提高性能并消除SQL注入攻击的威胁。
答案 1 :(得分:0)
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 = ???
答案 2 :(得分:0)
没有循环,只查询两个表。
SELECT
images.*
FROM
images
INNER JOIN
favorites
ON
favorites.img_ID = images.img_ID
WHERE
favorites.user_ID = X