这是我的表结构:
Table artwork AID CID SCID Title Dimensions Medium ArtFilePath ArtDate DateAdded ThumbFilePath DisplayOrder Comments Details Table categories CID CategoryName Table subcategories SCID CID SubCategoryName SubHeaderText
结果将为我提供变量getNext和getPrev,我可以这样使用:
<cfif prevDO gt 0 and getPrev.recordCount gt 0><a href="gallery_detail.cfm?AID=#getPrev.AID#">back</a></cfif>
<a href="gallery.cfm?CID=#getArt.CID#&SCID=#getArt.SCID#">#getArt.SubCategoryname#</a>
<cfif getNext.recordCount gt 0><a href="gallery_detail.cfm?AID=#getNext.AID#">next</a> </cfif>
我在这里有三个在ColdFusion中运行的查询。 AID是艺术ID# CID是CategoryName ID#即Oils,Drawings,Computer Art等。 SCID是SubCategoryName ID#,即男性,女性,儿童等
这些查询选择所选的CID和SCID,并提供该组中的所有AID以供查看。换句话说,让我看看男性组中的所有精油。
<cfquery name="getArt" datasource="mssqlcf_PDartist1">
select * from Artwork a
join Categories b on (b.CID = a.CID)
join SubCategories c on (c.CID = b.CID and c.SCID = a.SCID)
<!---left join Categories on (Categories.CID = Artwork.CID)
left join SubCategories on (SubCategories.CID = Categories.CID)--->
where AID = #AID#
order by DisplayOrder
</cfquery>
<cfset nextDO = getArt.DisplayOrder + 1>
<cfset prevDO = getArt.DisplayOrder - 1>
<cfquery name="getNext" datasource="mssqlcf_PDartist1">
select AID from Artwork
where CID = #getArt.CID#
and SCID = #getArt.SCID#
and DisplayOrder = #nextDO#
</cfquery>
<cfquery name="getPrev" datasource="mssqlcf_PDartist1">
select AID from Artwork
where CID = #getArt.CID#
and SCID = #getArt.SCID#
and DisplayOrder = #prevDO#
</cfquery>
我一直在尝试用PHP开头做同样的事情:
<?php
$dbname = 'pdartist2';
$table = 'artwork';
$result = mysql_query("SELECT * from artwork
a join categories b on (b.CID = a.CID)
join subcategories c on (c.CID = b.CID and c.SCID = a.SCID)
where AID = $AID
order by DisplayOrder") or die(mysql_error());
while($row = mysql_fetch_array($result)){
$AID = $row['AID'];
$ArtFilePath = $row['ArtFilePath'];
$ThumbFilePath = $row['ThumbFilePath'];
$Title = $row['Title'];
$Dimensions = $row['Dimensions'];
$Medium = $row['Medium'];
$Comments = $row['Comments'];
$DisplayOrder = $row['DisplayOrder'];
$Details = $row['Details'];
}
mysql_free_result($getArt);
?>
<?php $nextDO = getArt.DisplayOrder +1; ?>
<!--getNext-->
<?php
$dbname = 'pdartist2';
$table = 'artwork';
$result = mysql_query("SELECT AID from artwork where CID = getArt.CID and SCID = getArt.SCID and DisplayOrder = $nextDO") or die(mysql_error());
mysql_query($query);
?>
我遇到的问题是第二个查询的结果,因为我没有将第一个查询的结果导入$ getart。
问题是如何运行与这些ColdFusion查询具有相同结果的PHP查询?
答案 0 :(得分:4)
例如,coldfusion代码:
where aid = < cfqueryparam cfsqltype="cf_sql_integer" value="#aid#">
答案 1 :(得分:0)
首先,你的循环:
while($row = mysql_fetch_array($result)){
$AID = $row['AID'];
$ArtFilePath = $row['ArtFilePath'];
$ThumbFilePath = $row['ThumbFilePath'];
$Title = $row['Title'];
$Dimensions = $row['Dimensions'];
$Medium = $row['Medium'];
$Comments = $row['Comments'];
$DisplayOrder = $row['DisplayOrder'];
$Details = $row['Details'];
}
没有做任何事情。 while()结构将循环遍历sql查询返回的每条记录,但您似乎只是每次都要覆盖变量。在不知道你的表结构的情况下,我认为你的第二个查询应该嵌套在while()循环中。然后,这将针对从第一个查询返回的每个记录运行该查询。
另外,在不知道你的表格结构的情况下,我怀疑这也可以通过在第一个查询上进行另一次连接来实现,但我想这取决于你。
答案 2 :(得分:-1)
我没有从第一个查询到$ getart的结果。
第一行是一个非常简洁的问题摘要。缺少的一件事是实际结果与您期望的结果有什么关系?例如
“我正在尝试检索第一行中的”DisplayOrder“值 增加它。但相反,我收到错误消息
xyz...
(或)我 从行y
获取值。“
我的php充其量是可疑的,但据我所知,你的代码中没有声明$getart
变量。您将查询结果分配给名为$result
的变量,而不是$getart
。
$nextDO = getArt.DisplayOrder +1;
那仍然是CF语法。我相信您需要先从结果对象中获取row
。然后使用数组表示法访问该行中的特定column
- 就像您在while
循环中所做的那样。查看在线文档以获取确切的语法。
但我不知道我可以在循环中放入另一个查询。
我的CF代码中没有看到任何循环。如果你没有在CF中循环,那么在php中也没有必要。也就是说,无论如何,在循环内查询是一种不好的做法。这是非常低效的,应尽可能避免。