在mysql查询中包含php var结果

在mysql查询中包含php var结果,php,mysql,sql,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'); 我想在$users中

是否可以在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');

我想在
$users
中包含我在上一个查询中得到的
计数(*)
,这是否可以直接在查询中实现?

我已经编写了我自己的脚本,我想这就是您想要的:

$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。

您可以使用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
选择u.*,将userinfo中的(a.origin)计数为a.origin=u.id上的左连接操作,其中a.brand='.$id.'和子字符串(a.origin,1,3)“pct”组由a.origin组成
你将不得不尝试和调整它一点(可能),但它可能会使你的脚本容易得多。(我不确定userinfo是否也会分组在一起(可能不应该)


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

首先,对代码进行一些注释:

foreach ($ids as $ids)
这看起来是错误的,我不知道PHP是如何处理这一点的,但可能并不像您预期的那样。为了清楚起见,请使用不同的变量名

您需要在查询中转义“pct”周围的引号,以便PHP不会解析它们

另外,我不知道$id在第一条SQL语句中来自何处,但您可能希望对其进行转义。使用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();

是的,应该有用。您尝试过吗?使用过程或视图来自定义结果集怎么样
$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();
"SELECT origin,COUNT(*) as nummatches as actions from action WHERE `brand` = :id  AND SUBSTRING(origin,1,3)<>\"pct\" GROUP BY origin"
'SELECT *,' . $ids['nummatches'] . ' from userinfo WHERE `id` in ' . $norm_ids . ' ORDER BY `name`'