0

私は2つのテーブルを持っています:

content:
id    access
1     3
2     5
3     9

viewlevels:
id   group
1    [10,12,15]
2    [8,12,11]
3    [9,10,5]

content の access フィールドは、viewlevels の id フィールドに関連付けられています。

現在のユーザー グループに応じて、viewlevels の行を選択します。たとえば、グループ = 10 の場合、クエリは行 1 と 3 を選択します。グループが 12 の場合、行 1 と 2 を選択します。次のクエリを使用しています。

$query="SELECT id FROM #__viewlevels WHERE rules LIKE '%$group%'";

私の課題は、アクセスがテーブルビューレベルの上記のクエリから選択された ID と一致するテーブルコンテンツの列 ID の行数をカウントすることです。

次のコードを試してみましたが、エラーが返されます: undefined variable: nartigos

$query="SELECT count(id) FROM #__content WHERE access IN (SELECT id FROM #__viewlevels WHERE rules LIKE '%$group%')";

if ($stmt = mysqli_prepare($link, $query)) {

    /* execute query */
    mysqli_stmt_execute($stmt);

    /* store result */
    mysqli_stmt_store_result($stmt);

    $nartigos=mysqli_stmt_num_rows($stmt);

    /* close statement */
    mysqli_stmt_close($stmt);
};

echo "Nº de artigos " .$nartigos;
4

2 に答える 2

1

まず、データを正規化する必要があります。すべてのグループを 1 つの行に配置するのではなく、viewLevels に多対多の結合テーブルを使用することを検討してください。それは次のようになります。

access_id  group_id
1          10
1          12
1          15
2          8
2          11
2          12
3          5
3          9
3          10

それはあなたのクエリを次のように簡単にします

SELECT c.id AS `content_id`, COUNT(v.access_id) AS `content_count`
FROM content AS c INNER JOIN viewLevels AS v
  ON c.access_id = v.access_id
WHERE v.group_id = ?
GROUP BY c.id

?クエリ対象のグループ ID は次のとおりです。

正規化を行わない場合 (これも強くお勧めします)、引き続き結合を使用しますが、次のようになります。

SELECT c.id AS `content_id`, COUNT(v.access_id) AS `content_count`
FROM content AS c INNER JOIN viewLevels AS v
  ON c.access_id = v.access_id
WHERE v.group LIKE '%?%'
GROUP BY c.id
于 2013-08-23T22:52:17.350 に答える
-3

テーブルを「結合」する必要があります。

SQL コマンドは 2 つのテーブルを別々にクエリできません。

SQLで2つのテーブルを「結合」するときは、2つのテーブルのうち、空中で1つの仮想/一時テーブルを作成してクエリを実行できると考えてください。

これは非常に良いイントロですhttp://www.sitepoint.com/understanding-sql-joins-mysql-database/

于 2013-08-23T22:54:50.330 に答える