可以在MySQL结果中包含PHP数据吗?让我解释一下自己:
两个表,一个包含用户的操作,另一个包含用户信息。我将查询操作并检索用户ID并计算按用户分组的每个ID:
$ids = $conn->fetchAll('SELECT origin,COUNT(*) as actions from action WHERE `brand` = ' . $id . ' AND SUBSTRING(origin,1,3)<>"pct" GROUP BY origin');
然后我获取结果数组并使用它从另一个表输入用户信息:
$norm_ids = '(';
foreach ($ids as $ids) {
$norm_ids .= $ids['origin'] .',';
}
$norm_ids = substr_replace($norm_ids ,"",-1) .')';
$users = $conn->fetchAll('SELECT * from userinfo WHERE `id` in ' . $norm_ids . ' ORDER BY `name`');
我想在$users
中包含我在上一个查询中获得的COUNT(*)
,是否可以直接在查询中进行?
答案 0 :(得分:0)
我制作了自己的剧本,我想这就是你要找的东西:
$sql = "SELECT * FROM user WHERE Username = '".$_SESSION['Username']."' ";
$stm = $db->prepare($sql);
$result = $stm->execute(array());
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
$userid = $row['UserID'];
}
这里我得到了用户ID
$sql = "SELECT activity.*"."FROM user_activity, activity "."WHERE user_activity.ActivityID = activity.ActivityID AND user_activity.UserID = '".$userid."' " ;
这里你在我的查询中使用$ userid。
答案 1 :(得分:0)
您可以使用mysql连接:
SELECT u.*, count(a.origin) FROM userinfo AS u LEFT JOIN action AS a ON a.origin = u.id WHERE a.brand = '.$id.' AND SUBSTRING(a.origin,1,3) <> "pct" GROUP BY a.origin
你必须尝试稍微调整一下(可能)但它可能会使你的脚本更容易。 (我不确定userinfo是否也会被组合在一起(可能不应该)。)
使用JOIN时,您必须设置正确的索引以获得最佳性能。
答案 2 :(得分:0)
首先,对代码进行一些评论:
foreach ($ids as $ids)
这看起来不对,我不知道PHP如何处理这个问题,但可能并不像你期望的那样。使用不同的变量名称,只是为了清楚起见。
你需要在查询中转义“pct”周围的引号,这样它们就不会被PHP解析。
另外,我不知道第一个SQL语句中$ id的来源,但您可能想要转义它。使用PDO:
$stmt = $conn->prepare("SELECT origin,COUNT(*) as actions from action WHERE `brand` = :id AND SUBSTRING(origin,1,3)<>\"pct\" GROUP BY origin");
$stmt->execute( array( ":id" => $id ) );
$ids = stmt->fetchAll();
要访问COUNT(*)数据并将其添加到用户信息,我首先在第一个查询中重命名它(不喜欢我的数组键中的特殊字符):
"SELECT origin,COUNT(*) as nummatches as actions from action WHERE `brand` = :id AND SUBSTRING(origin,1,3)<>\"pct\" GROUP BY origin"
然后,您可以在第二个查询中将其添加到语句的SELECT部分:
'SELECT *,' . $ids['nummatches'] . ' from userinfo WHERE `id` in ' . $norm_ids . ' ORDER BY `name`'