如何交叉检验后显示内容
各位大神:我有两个表,A表里面的字段分别是id,content,B里面是id,content,userid,edittime,B表里面的数据是用户通过EDIT页面对A表里面内容的修改。我想实现以下功能:
如果用户没有登录,则按照ID顺序提取A表里面的内容显示;如果用户登录,则仍按A表中ID顺序显示,但如果该ID行里面的内容,该登录用户已经修改,并在B表里面有,则改行显示B表中最新修改的内容。我是这么写的,好像运行起来有点慢,有没有更有效率的方法?重新设计表也可以。总之,我的目的是如用户没有登陆则显示默认内容,如登陆了,则把相关内容替换显示为用户修改后的内容,显示内容的顺寻还是按照A表中ID的顺序。谢谢各位大神。
session_start () ;
include("IncDB.php");
$result=mysql_query("SELECT * FROM contents",$link);
$row=mysql_fetch_row($result);
$abcb=array();
while($row)
{
@$result1=mysql_query("SELECT * FROM usercontents where id='".$row[0]."' and userid='".$_SESSION['id']."' order by edittime desc limit 1",$link);
@$row1=mysql_fetch_row($result1);
if($row1==null)
{
$abcb[]=$row;}
else
{
$abcb[]=$row1;}
$row=mysql_fetch_row($result);
}
foreach($abcb as $v) {
echo "$v[0]$v[1]
";
}
?>
回复讨论(解决方案)
有人能帮忙看看么?
我就想知道是大家没看懂我的需求,还是其他啊?
看着有点绕圈
在用户没登录的情况下显示A表中的数据(默认的数据),用户登陆了显示B表中用户对应修改的数据,是不是这样的
你对 contents 表的所有记录,都执行一次对 usercontents 表的查询
那当然慢啦
回xuzuning,我也这么觉得是这个原因,那该怎么弄呢?有好办法么?谢谢!
回u014202165,是这个意思。每一行的显示都是这个规则,没登陆或用户未修改的,就显示默认,但如果用户登录了,那么该行就显示用户修改的内容。
大概的理解是:
A表是主记录表
B表是修改日志
如果不改表结构,已登录用户的记录可以通过简单的查询完成
select * from contents a left join (select * from usercontents where userid=[用户session_id] order by edittime desc limit 1) b on a.id=b.id
取出来的数据中包含默认的和最新的,页面再进行相应的处理即可。
如果数据量非常大,建议建立一张最后修改结果表,记录用户最后的修改结果,每个用户只保留一条,然后简单的表关联就可以查出来了,不用到日志中去搜。
忘了提醒下,相关字段请记得建索引,不然数据量大了也是很慢的
B表也是这样,每个用户在每个ID项下,只保留一条数据。是不是用您的代码就可以了?我试试看。
如果取出来的数据是包含默认的和最新的,那也没有意义,我其实可以把A和B两张表合一个也可以,只不过A表中的userid显示为空就可以。但下面怎么办呢?我的意思是怎么实现把用户的内容替代显示默认的内容。
好吧,送佛送到西
select a.id, case when b.content is null then a.content else b.content end content from contents a left join (select * from usercontents where userid=【用户session_id】 order by edittime desc limit 1) b on a.id=b.id
满足 userid=$_SESSION['id'] 的只有一条!
To楼主:
对于B表,不论每个用户在每个ID下有多少条,这个查询都是适用的。
因为子查询是按用户ID进行查找的,并且按编辑时间倒排序并只取了最后一条。
谢谢
我好好学习一下
session_start () ; include("IncDB.php"); //$_SESSION['id'] 只有一个,即使能查到多条记录,由于你有 limit 1,所以至多也只会有一个结果$result1=mysql_query("SELECT * FROM usercontents where userid='".$_SESSION['id']."' order by edittime desc limit 1",$link); $row1=mysql_fetch_row($result1); //把登录用户的信息先查出来$result=mysql_query("SELECT * FROM contents",$link); $row=mysql_fetch_row($result); $abcb=array(); while($row) { if($row1==null) { $abcb[]=$row; } else { $abcb[]=$row1;} $row=mysql_fetch_row($result); } foreach($abcb as $v) { echo "$v[0]$v[1] <br>"; }}
contents 是a表;usercontents是b表。我的代码是这么写的,好像不行啊。肯定是我错了,但该怎么改呢?谢谢谢谢!
session_start () ;
include("IncDB.php");
$result=mysql_query(select a.id, case when b.content is null then a.content else b.content end from content a left join
(select * from b where userid='".$_SESSION['id']."' order by edittime desc limit 1) b on a.id=b.id,$link);
$row=mysql_fetch_row($result);
while($row)
{
$abcb[] = $row;
$row=mysql_fetch_row($result);
}
foreach($abcb as $v) {
echo "$v[0]$v[1]
";
}
//mysql_close($link);
?>
回xuzuning,好像不行。另外,语句是不是也少一个while($row1)?因为同一个用户有可能更改多条内容。
都 limit 1 了,多少条数据不也只查得一条?
只查一条出来不能解决问题,因为,有可能用户会修改多条记录。不知道咋办了。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长
