复杂查询,并将其保存为数字变量


Complex query and save it to a numeric variable

我需要查询一组图像,我已经给ID号作为AID(艺术ID),并将这些特定的数字分配给一个变量。目的是用previous/next标签遍历组。到目前为止,我有这个查询选择的组:

SELECT AID, ThumbFilePath, Title, DisplayOrder,
  (SELECT COUNT(*) FROM artwork WHERE SCID=$SCID)
ResultCount FROM artwork
WHERE SCID = $SCID
ORDER BY DisplayOrder

我还没有弄清楚的是如何按$AID分组$ResultCount。(当然,它应该在DisplayOrder中,但这没有问题。)

现在的困难是在$ResultCount内部来回使用,特别是因为$AIDs将不是数字序列。

count子查询返回一个基于SCID = $SCID的所有行的值,但是外部查询返回多个AID值。在AID上分组与计数子查询相矛盾。

如果我理解正确,你正试图查询db以获得具有相同AID的行数的计数,如下所示:

援助:aidval1ThumbFilePath:"路径//拇指"标题:"mytitle"DisplayOrder: displayOrderVal

查询aids = aidval1的行数

援助:aidval2ThumbFilePath:"路径//拇指"标题:"mytitle"DisplayOrder: displayOrderVal

查询aids = aidval2的行数

。..

援助:aidvalnThumbFilePath:"路径//拇指"标题:"mytitle"DisplayOrder: displayOrderValResultCount: AID = aidvaln

的行数

如果这是正确的,试试这个:

SELECT AID, ThumbFilePath, Title, DisplayOrder, COUNT(SCID) as ResultCount
FROM artwork
WHERE SCID = $SCID
GROUP BY AID
ORDER BY DisplayOrder

至于防止SQL注入-确保$SCID进行类型检查并在必要时转义。如果SCID是INT或其他数字字段,则在执行查询之前确保$SCID是数字类型(例如:is_numeric($SCID))。如果它是字母数字,使用mysql_real_escape_string(假设您正在使用MySQL)是一个好的开始。请注意,这只是第一级安全,您可能需要阅读SQL注入攻击及其预防,以获得可靠的安全模型。