我需要查询一组我给ID号作为AID(Art ID)的图像,并将这些特定的数字分配给变量。目的是通过上一个/下一个标签来浏览该组。到目前为止,我已通过此查询选择了该组:
SELECT AID, ThumbFilePath, Title, DisplayOrder,
(SELECT COUNT(*) FROM artwork WHERE SCID=$SCID)
ResultCount FROM artwork
WHERE SCID = $SCID
ORDER BY DisplayOrder
我还没想到的是如何将$ ResultCount分组为$ AID。 (当然它应该在DisplayOrder中,但这不是问题。)
现在难以在$ ResultCount内部来回转换,特别是因为$ AID不会在数字序列中。
答案 0 :(得分:1)
您的count子查询返回一个值,该值基于SCID = $ SCID的所有行,但您的外部查询返回AID的多个值。对AID进行分组与count子查询相矛盾。
如果我理解正确,您正在尝试查询数据库以获取具有相同AID的行数,如下所示:
AID:aidval1 ThumbFilePath:“path / to / thumb” 标题:“mytitle” DisplayOrder:displayOrderVal ResultCount:AID = aidval1
的行数AID:aidval2 ThumbFilePath:“path / to / thumb” 标题:“mytitle” DisplayOrder:displayOrderVal ResultCount:AID = aidval2
的行数。 。
AID:aidvaln ThumbFilePath:“path / to / thumb” 标题:“mytitle” DisplayOrder:displayOrderVal ResultCount: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注入攻击及其预防措施,以获得可靠的安全模型。