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

时间:2011-11-26 16:27:05

标签: php

我需要查询一组我给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不会在数字序列中。

1 个答案:

答案 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注入攻击及其预防措施,以获得可靠的安全模型。