gpt4 book ai didi

php - 使用 MySQL 创建新闻通量,根据提供的表名和 ID 从 3 个表中选择

转载 作者:行者123 更新时间:2023-11-30 23:10:41 26 4
gpt4 key购买 nike

我正在尝试使用 MySQL 创建新闻通量... 为此,我有一个表“action”,它记录在其他 3 个表(“article”、“commentaire”)之一中插入或更新的任何时间','导演')。现在,我在第一个表“action”中有 4 列:

  • id_action(允许按顺序知道何时采取了行动)
  • 操作(添加/更新)
  • 表(其他 3 个表之一的名称)
  • id_table(上表对应id)

其他 3 个表具有不同的列名称和内容,因此,我有:

  • 包含列“id”、“titre”、“contenu”、“categorie”的表“article”
  • 包含“id”、“contenu”列的“commentaire”表
  • 包含“id”、“prenom”、“presentation”、“localisation”列的“auteur”表

我试过像这样的连接:

SELECT ar.*,co.*,au.*
FROM 'action' AS ac
LEFT JOIN ac.table AS tbl ON ac.id_table = tbl.id

...但它没有给出任何内容,因为表 'ac.table' 不存在...(实际上我希望它可能会采用表的名称并在 JOIN 中替换它.. .:p

因此,在 2-3 次尝试没有成功之后,我终于找到了一些可行的方法,但后者非常耗时且缓慢,我正在寻找更好的解决方案......我找到的解决方案由 4 个函数组成:

function showAllAction(){
$preprequete = "SELECT id_table, table
FROM 'action'";

$requete = $this->pdo->prepare($preprequete);
if ($requete->execute()) {
$result = $requete->fetchAll(PDO::FETCH_ASSOC);
$requete->closeCursor();
return $result;
}else{ die(print_r($requete->errorInfo()));}
return false;
}

后跟一个foreach

$actions = $this->showAllAction();
foreach ($actions as $value){
if($value['table']=='article'){
$article = $this->showArticle($value['id_table']);
echo $article['titre'];
}elseif($value['table']=='commentaire'){
$commentaire = $this->showCommentaire($value['id_table']);
echo $commentaire['contenu'];
}else{
$auteur = $this->showAuteur($value['id_table']);
echo $auteur['prenom'];
}
}

différentes 函数很简单,比如 SELECT(以下代码只是为了说明,我已经删除了所有不需要的东西以达到目的):

function showArticle($id_table){
"SELECT titre, contenu, categorie
FROM 'article'
WHERE id = :id_table"
}
function showCommentaire($id_table){
"SELECT contenu
FROM 'commentaire'
WHERE id = :id_table"
}
function showAuteur($id_table){
"SELECT prenom, presentation, localisation
FROM 'auteur'
WHERE id = :id_table"
}

这个,如果有人有更有效的方法来做需要做的事情,欢迎所有答案! JOIN,条件语句,我不知道有什么办法...

最佳答案

在每个表上粘贴一对 datetime 列,一个用于 creation_time,一个用于 update_time。有关更详细的解释,请参阅[此链接][http://twopieceset.blogspot.com.au/2007/12/best-practices-5-ws-of-database-design.html]。

您可以创建一个 View 来简化按时间顺序查找,例如:

create or replace view recent_updates as 
select 'article' as `table`, article_id from article
where update_time > now() - interval 1 day
union all
select 'comment' as `table`, comment_id from comment
where update_time > now() - interval 1 day
union all
...
order by update_time desc
limit 1000
;

即使您的数据库在增长并且不需要单独的跟踪表,这也会保持快速。不要忘记为时间列编制索引!

(注意:添加了一个新答案,因为这不适合评论)

关于php - 使用 MySQL 创建新闻通量,根据提供的表名和 ID 从 3 个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876108/

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