Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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 根据表2中的条目从表1中选择结果_Php_Sql_Date - Fatal编程技术网

Php 根据表2中的条目从表1中选择结果

Php 根据表2中的条目从表1中选择结果,php,sql,date,Php,Sql,Date,我有两张桌子 横幅视图(id、b\U id、b\U日期)-此记录每次显示时都会显示一个横幅视图 动态横幅(id、状态、静态名称、静态关键字、静态url、静态alt、静态类型、静态图像、视图、点击)-存储横幅数据 我想选择3个banner\u dynamic结果,它们在过去7天中的浏览量最少 我确实把一些东西放在了一起(见下文),但我意识到这是抓住了所有横幅的总视图,而不是唯一的id SELECT *, (SELECT COUNT(*) FROM banner_views v WHERE v.

我有两张桌子

横幅视图(id、b\U id、b\U日期)
-此记录每次显示时都会显示一个横幅视图

动态横幅(id、状态、静态名称、静态关键字、静态url、静态alt、静态类型、静态图像、视图、点击)
-存储横幅数据

我想选择3个
banner\u dynamic
结果,它们在过去7天中的浏览量最少

我确实把一些东西放在了一起(见下文),但我意识到这是抓住了所有横幅的总视图,而不是唯一的id

SELECT  *, 
(SELECT COUNT(*) FROM banner_views v WHERE v.b_date >= DATE(NOW()) - INTERVAL 7 DAY) as post_count 
FROM banners_dynamic b  
WHERE static_keywords LIKE '%test%' AND b.status='1' AND b.static_type='1' 
ORDER BY post_count ASC LIMIT 3

有人能给我指出正确的方向吗?

您必须将
横幅\u dynamic
表和子查询与相应的横幅ID连接起来:

SELECT
    b.*, p.b_count
FROM
    banners_dynamic b
    INNER JOIN (
        SELECT
            b_id,
            COUNT(*) AS b_count
        FROM
            banner_views v
        WHERE
            v.b_date >= DATE(NOW() - INTERVAL 7 DAY)
        GROUP BY
            b_id
    ) p on p.b_id = b.id
WHERE
    b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
ORDER BY
    p.b_count ASC
LIMIT 3
更新:即使没有子查询,您也可以这样做:

SELECT
    b.*, COUNT(v.b_id) AS b_count
FROM
    banners_dynamic b
    INNER JOIN banner_views v ON v.b_id = b.id
WHERE
    v.b_date >= DATE_ADD(NOW(), INTERVAL - 7 DAY)
    AND b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
GROUP BY
    v.b_id
ORDER BY
    b_count ASC
LIMIT 3;
如果您想包含没有任何视图的横幅(计数=0),则必须执行
左加入操作

SELECT
    b.*, COUNT(v.b_id) AS b_count
FROM
    banners_dynamic b
    LEFT JOIN banner_views v ON v.b_id = b.id
              AND v.b_date >= DATE_ADD(NOW(), INTERVAL - 7 DAY)
WHERE
    b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
GROUP BY
    v.b_id
ORDER BY
    b_count ASC
LIMIT 3;

您必须使用相应的横幅ID将
横幅\u dynamic
表和子查询连接起来:

SELECT
    b.*, p.b_count
FROM
    banners_dynamic b
    INNER JOIN (
        SELECT
            b_id,
            COUNT(*) AS b_count
        FROM
            banner_views v
        WHERE
            v.b_date >= DATE(NOW() - INTERVAL 7 DAY)
        GROUP BY
            b_id
    ) p on p.b_id = b.id
WHERE
    b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
ORDER BY
    p.b_count ASC
LIMIT 3
更新:即使没有子查询,您也可以这样做:

SELECT
    b.*, COUNT(v.b_id) AS b_count
FROM
    banners_dynamic b
    INNER JOIN banner_views v ON v.b_id = b.id
WHERE
    v.b_date >= DATE_ADD(NOW(), INTERVAL - 7 DAY)
    AND b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
GROUP BY
    v.b_id
ORDER BY
    b_count ASC
LIMIT 3;
如果您想包含没有任何视图的横幅(计数=0),则必须执行
左加入操作

SELECT
    b.*, COUNT(v.b_id) AS b_count
FROM
    banners_dynamic b
    LEFT JOIN banner_views v ON v.b_id = b.id
              AND v.b_date >= DATE_ADD(NOW(), INTERVAL - 7 DAY)
WHERE
    b.static_keywords LIKE '%test%'
    AND b.`status` = '1'
    AND b.static_type = '1'
GROUP BY
    v.b_id
ORDER BY
    b_count ASC
LIMIT 3;

横幅上的b_id是否动态查看横幅上的id?我看不出它们之间有什么联系。横幅上的b_id是动态的吗?我不知道它们之间有什么关系。谢谢mitkosoft-工作完美,下次很容易理解(我使用了第三个选项,因为当添加新的横幅时,我会有0)。太好了!在这种情况下标记答案以结束主题。感谢mitkosoft-工作完美,下次很容易理解(我使用了第三个选项,因为添加新横幅时我将有0)。太好了!在这种情况下标记答案以结束主题。