我被一个愚蠢的问题弄得不知所措。
我正在使用php + mysql在我的网站上的广告。
我的想法是使用相同的表来做广告,所以,有7种不同类型的广告,每5种正常就合并1种“赞助”广告类型。
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个广告插入一个默认的赞助广告。
样本数据
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索引示例数据
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当定义位置“巴哈马”时,需要输出样本
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之类的东西,不太确定。
提前谢谢-
发布于 2022-02-05 01:32:34
每5个帖子我将插入一个广告。
$counter = 0;
foreach($posts as $post) {
if(++$counter % 5 === 1) {
include './advertisment/advertisment.php';
}现在,除了我对广告的查询之外:
$limit = intval($counter);
$offset = intval($counter/5);在我的示例中,如果参数位置被传递,则对ads的查询按位置查找广告,如果没有传递的位置,则检索任何广告,其余的插入将使用默认广告。我的赞助商广告有效期为3个月,这就是为什么我也检查间隔。
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个普通帖子插入一个广告,公开赞助商的偏好位置,如果没有,任何赞助商都可以插入默认广告(你可以用它来检索随机赞助商)。
https://stackoverflow.com/questions/70765402
复制相似问题