在mysql查询中包含php var结果

时间:2013-01-25 10:13:42

标签: php mysql sql

可以在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(*),是否可以直接在查询中进行?

3 个答案:

答案 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`'