好的,在我开始之前,我必须告诉你,我要问的是非常具体而且非常难以解释,所以我将尽我最大努力使其明确和尽可能简单。谢谢。
我有两个表有两个完全不同的模式,一个名为 mixtapes ,另一个名为 blabbing 。我希望能够将两个表组合成一个fetch,按日期排序,但用完全不同的格式回显它们。
想象一下它是facebook的模拟信息。如果所有内容都在不同的数据库中(图像更改,帖子,链接帖子等),则所有内容都按日期排序(如果选择了选项),但它们都在不同的数据库中。
我想坚持使用mysql fetch数组的格式化:
$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和amp;中获取数据。诽谤并将其组合成15个最新(按日期)的结果,但格式不同,例如:
如果结果(15个中的一个)来自mixtapes,它应该像这样形成:
$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 (PRIMARY)
Idofpage
poster_id (发布blab的用户的ID)
日期
the_blab
blab_type
设备
id (PRIMARY)
标题
if_featured
评级
流派
持续时间
number_of_tracks
说明
关键字
日期
posted_by_id
twitter_tags
答案 0 :(得分:2)
使用UNION
查询和明智数量的 filler 列(您没有指定每个表中需要哪些列,所以我只是在这里猜测)。为了支持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
语句具有匹配的列号和类型。
结果集中的每一行都会有一个type
列,其中包含mixtape
或blab
值,因此您可以确定它来自哪个表。
渲染示例(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和source表。当您迭代结果集时,我只需通过ID查询相应的表,以获取该记录的完整数据集。如果适当的缓存,这应该表现得相当好,并且更容易理解。
您可能还会考虑使用非关系数据库(Mongo,CouchDB等),因为它可能更适合该任务。