Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据其他表的条件,计算MySQL表中的行数_Php_Mysql_Sql - Fatal编程技术网

Php 根据其他表的条件,计算MySQL表中的行数

Php 根据其他表的条件,计算MySQL表中的行数,php,mysql,sql,Php,Mysql,Sql,我有两张桌子: content: id access 1 3 2 5 3 9 viewlevels: id group 1 [10,12,15] 2 [8,12,11] 3 [9,10,5] 内容中的访问字段与ViewLevel中的id字段相关 我根据当前用户组选择ViewLevel中的行。例如,如果group=10,我的查询将选择第1行和第3行。如果组为12,它将选择第1行和第2行等。我使用以下查询: $query="SELECT id

我有两张桌子:

content:
id    access
1     3
2     5
3     9

viewlevels:
id   group
1    [10,12,15]
2    [8,12,11]
3    [9,10,5]
内容中的访问字段与ViewLevel中的id字段相关

我根据当前用户组选择ViewLevel中的行。例如,如果group=10,我的查询将选择第1行和第3行。如果组为12,它将选择第1行和第2行等。我使用以下查询:

$query="SELECT id FROM #__viewlevels WHERE rules LIKE '%$group%'";
我的挑战是计算表内容中列id的行数,其中访问与上述表ViewLevel查询中的选定id匹配

我尝试了以下代码,但返回了错误:未定义变量: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;

首先,您真的应该规范化您的数据。考虑一个多对多连接表,而不是在一行中拥有所有组。可能是这样的:

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 LIKE '%?%'
GROUP BY c.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_id = ?
GROUP BY c.id
这里?是要查询的组id

如果不进行规范化(我再次强烈建议您这样做),您仍然会使用联接,但它看起来是这样的:

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 LIKE '%?%'
GROUP BY c.id

你需要加入你的表格

sql命令不能单独查询两个表

当您在sql中连接两个表时,可以将其视为在空中创建一个虚拟/临时表,然后可以查询其中的两个表


这是一个很好的介绍

\u内容是表名!!您是否尝试单独执行sql?照目前的情况,这个答案并没有回答这个问题。请详述你的答案,包括参考资料,或提供代码。伙计,放松。这是一个完整的答案。这将引导op了解他/她需要研究和了解的领域。我相信它们是有用的,而且从长远来看,它们似乎比给出快速解决方案更有用。但我会为你们扩展答案。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@Prashant-请参阅我刚才在上面留下的评论。我尝试了第二种选择,但仍然得到相同的错误:未定义变量:nartigos。我将尝试按照您的建议规范化数据,但我无法更改viewlevels表--这是一个JoomlaCMS@NunoNogueira目前,您的代码中确实没有任何错误处理来帮助您发现问题所在。我建议您捕获并检查每个数据库操作的值,以便缩小问题的范围。