gpt4 book ai didi

php - 合并两个 MySql 数据库,按日期排序,但格式不同

转载 作者:行者123 更新时间:2023-11-29 07:01:37 28 4
gpt4 key购买 nike

好吧,在我开始之前,我必须告诉你我要问的问题非常具体而且非常难以解释,所以我会尽我最大的努力让它尽可能清晰明了尽可能简单。谢谢。


问题:

我有两个表,其中包含两个完全不同的模式,一个称为 mixtapes,另一个称为 blabbing。我希望能够将两个表合并为一个提取,按日期排序,但用完全不同的格式将它们呼应出来。

将其想象成 facebook 的模拟提要。一切都在不同的数据库中(图像更改、帖子、链接帖子等),一切都按日期排序(如果选择了选项)但它们都在不同的数据库中。

我想坚持这种 mysql 获取数组的格式:

$sqlLatestActivity = mysql_query("SELECT * FROM mixtapes WHERE posted_by_id
IN ($array_of_subscribing);");

while($row = mysql_fetch_array($sqlLatestActivity)){
$id = $row["id"];
$title = $row["title"];
$description = $row["description"];
$keywords = $row["keywords"];
$date = strtotime($row["date"]);
$posted_by_id = $row["posted_by_id"];}


我想从两个表、mixtapes 和 blabbing 中获取数据,并将其合并为 15 个最新(按日期)但格式不同的结果,例如:

如果结果(15 个中的一个)来自混音带,则其格式应如下所示:

$the_variable_echoing .= 
'<div>' . $posted_by_id . ' Just Added a Mixtape. To listen To it, go
<a href="/THEMIXTAPE.php">here</a></div>';

然而,如果它是一个 blab 并且结果来自 blabbing,则它的格式应如下所示:

$the_variable_echoing .= '<div>' . $the_blab . '<br />
Posted: ' . $blab_date . '</div>';


在我的 body 里,我要添加:

<?php echo $the_variable_echoing; ?>

表信息


关于 喋喋不休

id (主要)
页面标识
poster_id (发帖用户ID)
日期
the_blab
blab_type
设备

关于 混音带

id (主要)
标题
如果有特色
评级
流派
时长
轨道数
描述
关键词
日期
posted_by_id
twitter_tags

最佳答案

使用 UNION 查询和适当数量的 filler 列(您没有指定每个表中需要哪些列,所以我在这里只是猜测).为了支持 WHERE 条件,我还将其设为一个 View ,例如

CREATE VIEW `feed` AS
SELECT
id,
title,
description,
keywords,
`date`,
posted_by_id,
'mixtape' AS `type`
FROM mixtapes
UNION ALL
SELECT
id,
the_blab AS title,
device AS description, -- use device in the description column
null AS keywords, -- this will be blank
`date`,
poster_id AS posted_by_id,
'blab' AS `type`
FROM blabbing;

然后使用SELECT

SELECT * FROM `feed` WHERE `posted_by_id` IN (?, ?, ?)
ORDER BY `date` DESC
LIMIT 15

您只需确保两个组合的 SELECT 语句具有匹配的列号和类型。

结果集中的每一行都有一个 type 列,其中包含 mixtapeblab 值,因此您可以确定它来自哪个表。

示例渲染(PDO,使用它!)

$stmt = $pdo->prepare('SELECT * FROM `feed` ORDER BY `date` DESC LIMIT 15');
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) : ?>
<div>
<?php if ($row['type'] == 'mixtape') : ?>
<?php echo htmlspecialchars($row['posted_by_id'], ENT_QUOTES, 'UTF-8') ?>
Just Added a Mixtape. To listen To it, go
<a href="/THEMIXTAPE.php">here</a>
<?php elseif ($row['type'] == 'blab') : ?>
<!-- echo title as this is the the_blab alias in the view -->
<?php echo htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8') ?>
<br />
Posted: <?php echo htmlspecialchars($row['date'], ENT_QUOTES, 'UTF-8') ?>
<?php endif ?>
</div>
<?php endwhile ?>

作为涉及更多查询的考虑因素(但是嘿,总共只有 15 条记录)。我可能会选择这样的东西

SELECT `id`, `date`, 'mixtape' AS `type` FROM mixtapes
UNION ALL
SELECT `id`, `date`, 'blab' AS `type` FROM blabbing
ORDER BY `date` DESC
LIMIT 15

现在您拥有两个表中最新十五个条目的 ID 和源表。当您迭代结果集时,我将简单地通过 ID 查询适当的表以获取该记录的完整数据集。如果有适当的缓存,这应该表现得相当好并且更容易理解。

您还可以考虑使用非关系数据库(Mongo、CouchDB 等),因为它可能更适合该任务。

关于php - 合并两个 MySql 数据库,按日期排序,但格式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901821/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com