1

MySQL の結果に PHP データを含めることは可能ですか? 私は自分自身を説明しましょう:

2 つのテーブル。1 つはユーザーのアクション、もう 1 つはユーザー情報です。アクションをクエリしてユーザー 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

そのために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を使用する場合は、パフォーマンスを最大化するために正しいインデックスを設定する必要があります。

于 2013-01-25T10:22:22.780 に答える
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

まず、コード全般に関するいくつかのコメント:

foreach ($ids as $ids)

これは間違っているように見えます。PHP がこれをどのように処理するかはわかりませんが、おそらく期待どおりではないでしょう。わかりやすくするために、別の変数名を使用してください。

PHP によって解析されないように、クエリの "pct" を囲む引用符をエスケープする必要があります。

また、最初の 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"

次に、2 番目のクエリのステートメントの SELECT 部分に追加できます。

'SELECT *,' . $ids['nummatches'] . ' from userinfo WHERE `id` in ' . $norm_ids . ' ORDER BY `name`'
于 2013-01-25T10:25:36.743 に答える