好的,在我开始之前,我必须告诉你,我要问的问题非常具体,非常难以解释,所以我会尽我最大的努力让它尽可能清晰和简单。谢谢
问题:
我有两个表,它们有两个完全不同的模式,一个称为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"];}
我想从两个表中提取数据,混音带&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>';
在我的身体里,我要补充:
<?php echo $the_variable_echoing; ?>
表格信息
关于:喋喋不休
id(主)
页码
poster_id(发布blab的用户的id)
日期
实验室blab_type
设备
关于:混音带
id(主)
标题
if_featured
评级
流派
持续时间
曲目数量
说明
关键字
日期
posted_by_id
twitter_tags
使用UNION
查询和适当数量的填充列(您没有指定每个表需要哪些列,所以我在这里只是猜测)。为了支持WHERE
条件,我也会将其作为一个视图,例如
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
语句具有匹配的列编号和类型。
结果集中的每一行都将有一个具有mixtape
或blab
值的type
列,因此您可以确定它来自哪个表。
示例渲染(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等),因为它可能更适合该任务。