gpt4 book ai didi

php - 如何在一个语句中使用两个 mysql 表

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:29 25 4
gpt4 key购买 nike

所以,我放入了一个最喜欢的图片表,但我不知道如何让它正常工作

基本上,这是设置:

ImageFavs
FavID, UserID, ImgID

ImageList
ImgID, SiteID

我希望它从收藏夹表中选择 20 个左右的图像,但只选择与图像列表中的 siteid 匹配的图像

这是我目前拥有的代码,但我突然意识到它会从收藏夹中选择 20 张图片,然后仅在实际检查了匹配站点时才显示它们。

#select matching sites
for($i=0;$i<count($sites)-1;$i++){
$siteinfo = explode("-",$sites[$i]);
$siteid = $siteinfo[0];
$sitegroup = $siteinfo[1];
$selection[$siteid]="exists";
if($i!=0){
$sqlextra .= " OR ";
}
else{
$sqlextra = "AND (";
}
$sqlextra .= "SiteID='".$siteid."'";
}
if(!empty($sqlextra)){
$sqlextra .= ")";
}
else{
$sqlextra = "AND SiteID='-1'";
}

#show favourites
if($_GET['f']==1){
$sql="SELECT * FROM ImageFavs WHERE UserID='".$_SESSION['User_ID']."' AND Active = '1' ORDER BY RAND() LIMIT 20";
#(rand is just me being lazy, eventually I'll figure out how to separate it onto pages)
$result = mysql_query($sql);
$num = mysql_numrows($result);
if($num>0){
while ($row=mysql_fetch_array($result, MYSQL_BOTH)){
if(empty($sqlextra2)){
$sqlextra2 = " AND (";
}
else{
$sqlextra2 .= " OR ";
}
$sqlextra2 .= "ImgID='".$row['ImgID']."'";
}
$sqlextra2 .= ")";
}
}
#don't show favourites
if(empty($sqlextra2)){
$sqlextra2 = " ORDER BY RAND() LIMIT 20";
}
$sql="SELECT * FROM ImageList WHERE Valid='1' ".$sqlextra.$sqlextra2;

虽然这个输出 $sql 看起来可以更简洁,但它的一个例子是这样的

SELECT * FROM ImageList WHERE Valid='1' AND (SiteID='6') AND (ImgID='5634' OR ImgID='8229' OR ImgID='9093' OR ImgID='5727' OR ImgID='7361' OR ImgID='5607' OR ImgID='7131' OR ImgID='5785' OR ImgID='7339' OR ImgID='5849' OR ImgID='7312' OR ImgID='5641' OR ImgID='8921' OR ImgID='7516' OR ImgID='7284' OR ImgID='5873' OR ImgID='8905' OR ImgID='7349' OR ImgID='7392' OR ImgID='8725')

此外,当我在这里时,是否有一种非资源密集型方法来计算每个网站用户的收藏夹数量?

不是为了什么大事,只是在个人网站上混一混,看看自己能做些什么。

最佳答案

您可以INNER JOIN 您的两个表以获得您想要的结果。 INNER 当您需要两个表的结果时使用。最好使用别名来使您的表格保持整洁。

SELECT l.*
FROM ImageFavs f
INNER JOIN ImageList l ON f.ImgID = l.ImgID
WHERE l.SiteID = [your site ID]
AND f.UserID='" . $_SESSION['User_ID'] . "'
AND f.Active = '1'
ORDER BY RAND() LIMIT 20

要按站点获取计数,您可以使用 GROUP BY。我认为这应该让你算数

SELECT COUNT(f.ImgID)
FROM ImageFavs f
INNER JOIN ImageList l ON f.ImgID = l.ImgID
WHERE f.UserID='" . $_SESSION['User_ID'] . "'
AND f.Active = '1'
GROUP BY l.SiteID

关于php - 如何在一个语句中使用两个 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com