我最近升级了一个论坛数据库,但帖子没有链接到用户。查看表格,我可以看到以下内容(为简洁而缩短所有表格的示例):
jos_posts:
Poster = Guest (which is incorrect)
Poster_ID = 0 (which is incorrect)
Topic_ID = 10
jos_Topics:
id = 10
Poster = Ian
jos_users:
Poster_ID = 2153
Username = Ian
因此虽然poster_ID在jos_posts中错误地显示为0,但是Topic_ID的关系链接意味着可以找到真实的Poster,以及随后的jos_users表中的Poster_ID,并且希望更新jos_posts表。
在我看来,我需要执行以下步骤:
现在我的问题:我的php / SQL编码很差,所以任何人都可以确认我的上面的逻辑是正确的,如果可能的话,指出我正确的方向写一个可以纠正jos_posts表的短程序? / p>
答案 0 :(得分:1)
不需要循环,它只是两个简单的SQL语句:
update jos_posts set poster_id = (
select u.poster_id from jos_topics t, jos_users u
where t.id = topic_id and t.poster = u.username);
随后更新海报栏,一切都应该没问题:
update jos_posts set poster = (
select u.username from jos_users u where u.poster_id = poster_id);
答案 1 :(得分:0)
最好只抓取jos_posts中的所有记录并迭代它们,执行你列出的其他操作。
$posts = mysql_query("select * from jos_posts");
if($posts){
while($post = mysql_fetch_array($posts)){
$topic = $post['Topic_ID'];
/* Look up the topic and get poster */
/* Look up the user and get the id */
$sql = "UPDATE jos_posts SET Poster = '".$poster
."', Poster_ID = '."$posterid"
.' WHERE Topic_ID = '".$topic."'";
mysql_query($sql);
}
}
这样的事情可能会解决......根据需要添加逻辑。
答案 2 :(得分:0)
使用此查询选择所有用户及其ID。
SELECT jos_Topics.Topic_ID,jos_Topics.Poster,jos_users.Poster_ID 来自jos_Topics INNER JOIN jos_users ON jos_Topics.Poster = jos_users.Username
使用上一个查询更新jos_posts Poster_ID。
但是,我很确定您的问题是您在两个地方开始使用数据。关系数据库的重点是消除冗余。
答案 3 :(得分:0)
不完全偏离主题,我希望:
伊恩肯定能很好地描述他的问题。但是,通过一些进一步的工作,可以使用一个使问题可测试的脚本来扩充描述:
use test;
DROP TABLE IF EXISTS jos_posts;
CREATE TABLE jos_posts (
Id INTEGER PRIMARY KEY
, Poster VARCHAR( 20 )
, Poster_ID INTEGER
, Topic_ID INTEGER
);
INSERT INTO jos_posts VALUES (1, 'GUEST', 0, 10);
INSERT INTO jos_posts VALUES (2, 'GUEST', 0, 20);
DROP TABLE IF EXISTS jos_topics;
CREATE TABLE jos_topics (
Id INTEGER PRIMARY KEY
, Poster VARCHAR( 20 )
);
INSERT INTO jos_topics VALUES (10, 'JAN');
INSERT INTO jos_topics VALUES (20, 'JON');
DROP TABLE IF EXISTS jos_users;
CREATE TABLE jos_users (
Poster_ID INTEGER PRIMARY KEY
, Username VARCHAR( 20 )
);
INSERT INTO jos_users VALUES (2153, 'JAN');
INSERT INTO jos_users VALUES (2154, 'JON');
SELECT * FROM jos_posts;
-- please insert solution here
SELECT * FROM jos_posts;
然后像弗兰克施密特这样的大师可以立即发布他的解决方案,像我这样的挑剔者不需要花费数小时来获得反对的证据
update jos_posts set poster = (
select u.username from jos_users u where u.poster_id = poster_id
);
应该是:
update jos_posts p set poster = (
select u.username from jos_users u where u.poster_id = p.poster_id
);