1

可以在 MySQL 结果中包含 PHP 数据吗?让我解释一下自己:

两张表,一张包含用户的操作,一张包含用户信息。我会查询操作并检索用户 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(*)我在上一个查询中得到的,这可以直接在查询中吗?

4

3 回答 3

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。

于 2013-01-25T10:18:47.393 回答
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

您必须尝试稍微调整一下(可能),但它可能会使您的脚本更容易。(我不确定用户信息是否也会被组合在一起(可能不应该))。

使用 JOIN 时,您必须设置正确的索引以获得最佳性能。

于 2013-01-25T10:22:22.780 回答
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`'
于 2013-01-25T10:25:36.743 回答