首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合两个查询mysql并组织结果5:1插入

组合两个查询mysql并组织结果5:1插入
EN

Stack Overflow用户
提问于 2022-01-19 04:45:44
回答 1查看 53关注 0票数 0

我被一个愚蠢的问题弄得不知所措。

我正在使用php + mysql在我的网站上的广告。

我的想法是使用相同的表来做广告,所以,有7种不同类型的广告,每5种正常就合并1种“赞助”广告类型。

代码语言:javascript
复制
 CREATE TABLE `posts` (
 `post_id` int(11) NOT NULL,
 `type` enum('type1','type2','type3','type4','type5','type6','type7','sponsored') CHARACTER SET utf16 NOT NULL DEFAULT 'type1',
 
 PRIMARY KEY (`post_id`),
 ) ENGINE=InnoDB DEFAULT CHARSET=utf16 COLLATE=utf16_unicode_ci

可确定的结果应是:

广告类型1:7: 1,2,3,4,5广告赞助(1)广告类型1-类型7: 6,7,8,9,10广告赞助(2)广告1-类型7: 11,12,13,14,15,并继续重复模式的结果,如果没有更多的赞助商,然后插入默认广告。

如果没有找到与查询参数相关的赞助广告:

1,2,3,4,5-(default)-6,7,8,9,10-(default)-11,12,13,14,15-(default)...

现在,我正在使用一个php文件,每5个广告插入一个默认的赞助广告。

样本数据

代码语言:javascript
复制
post_id  type    location
1        type2    Bahamas
2        type4    Seville
4       sponsored   Bahamas
5       sponsored   Singapur
6       type1     Bilbao
7      sponsored   Bahamas
8     type1       Bahamas
9     type6       Bahamas
10     type4       Bahamas
11     type1       New York
12     type1       Bahamas
13     type6       Bahamas

输出以显示AT索引示例数据

代码语言:javascript
复制
post_id  type    location
1        type2    Bahamas
2        type4    Seville
6       type1     Bilbao
8      type1       Bahamas
9      type6       Bahamas
xx     sponsored   xxxx    >> RANDOM SPONSOR
10     type4       Bahamas
11     type1       New York
12     type1       Bahamas
13     type6       Bahamas

当定义位置“巴哈马”时,需要输出样本

代码语言:javascript
复制
post_id  type    location
1    type2       Bahamas
8     type1       Bahamas
9     type6       Bahamas
10     type4       Bahamas
12     type1       Bahamas
2     sponsored Bahamas
13     type6       Bahamas

现在,我正在执行两个基本的选择查询(一个用于普通的ads,一个用于赞助的ads),并将结果存储在我组合的数组上。

使用php,我每5个普通广告插入1个广告。

我的目标是优化我的方法,因为我不知道是否有任何mysql论点可以改善我的公式。

是的,ADyson听起来像一个插入,因为用户插入赞助的广告就像一个普通的广告,这就是为什么我试图用同样的表格来组织所有的事情。否则,我可以为广告创建另一个表,但只要我不了解mysql,就看不到差别。我迷上了连接,内部连接,互联系统,如果.我正在查看不同的帖子,但没有看到任何与这个问题相匹配的东西。

也许我要找的是Slicing a Mysql array之类的东西,不太确定。

提前谢谢-

EN

回答 1

Stack Overflow用户

发布于 2022-02-05 01:32:34

每5个帖子我将插入一个广告。

代码语言:javascript
复制
$counter = 0;
foreach($posts as $post) { 
if(++$counter % 5 === 1) { 
 include './advertisment/advertisment.php';
    }

现在,除了我对广告的查询之外:

代码语言:javascript
复制
  $limit = intval($counter);
  $offset = intval($counter/5);

在我的示例中,如果参数位置被传递,则对ads的查询按位置查找广告,如果没有传递的位置,则检索任何广告,其余的插入将使用默认广告。我的赞助商广告有效期为3个月,这就是为什么我也检查间隔。

代码语言:javascript
复制
if ((isset($_GET['location'])) && (!empty($_GET['location']))) {                
                $location = $_GET['location'];
                $query = $pdo->prepare("SELECT * FROM `posts`
            WHERE type = 'advertisment' AND DATE(post_on) > NOW() - INTERVAL 12 WEEK 
            AND id IN (SELECT id FROM `postcontenttable` WHERE location = :location AND posts.id = postcontenttable.post_id)   
            ORDER BY RAND() LIMIT :limit OFFSET :offset");
                $query->bindParam(":location" , $location , PDO::PARAM_STR);                                
            } else {    
                $query = $pdo->prepare("SELECT * FROM `posts`
            WHERE type = 'advertisment' AND DATE(post_on) > NOW() - INTERVAL 12 WEEK   
            ORDER BY RAND() LIMIT :limit OFFSET :offset");              
            }
            $query->bindParam(':limit', $limit, PDO::PARAM_INT);
            $query->bindParam(':offset', $offset, PDO::PARAM_INT);
            $query->execute();
            $ads = $query->fetchAll(PDO::FETCH_OBJ);
if (!($query->rowCount() == 0)) { 

foreach($ads as $post) { 
if(++$offset % 1 === 0) { 
    break;
} 
}
} else { ?>
<?php include './advertisment/ad.php'; ?>
<?php } ?>

因此,我每5个普通帖子插入一个广告,公开赞助商的偏好位置,如果没有,任何赞助商都可以插入默认广告(你可以用它来检索随机赞助商)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70765402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档