因此,我错误地从我们的 Magento 商店中删除了所有评论。有趣的是,当我登录 PhpMyAdmin 时,我仍然可以看到我所有评论所在的 review_detail 表,所以我猜它没有从数据库中删除?
现在的问题是,我如何从数据库中获取这些评论以显示在网站上?我要删除 review_detail 数据库并再次导入吗?
谢谢!
因此,我错误地从我们的 Magento 商店中删除了所有评论。有趣的是,当我登录 PhpMyAdmin 时,我仍然可以看到我所有评论所在的 review_detail 表,所以我猜它没有从数据库中删除?
现在的问题是,我如何从数据库中获取这些评论以显示在网站上?我要删除 review_detail 数据库并再次导入吗?
谢谢!
Magento 评论是跨三个不同数据库表的存储。
该review
表是跟踪每个评论对象并将其链接到其评论的对象(即产品)的主表。如果那里没有条目,则没有评论。
该review_detail
表是实际包含评论信息的表。
最后,该review_store
表跟踪哪些评论属于每个 Magento 商店实例。(存储意味着 Magento 在同一系统中“存储”对象)
我的猜测是您的删除操作通过了review
表,而不是其他操作。如果是这种情况,您的数据(没有备份)就消失了。如果那里还有数据,那么你就会遇到一个不同的、更微妙的问题,而且我不确定这种数据恢复是不是专家可以让非专家完成的事情。
基于 Alan 和 Giri06 的答案的小脚本可恢复您消失的评论。
<?php
$xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);
$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$pref = $xml->global->resources->db->table_prefix;
mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
mysql_select_db($db['name']) or die(mysql_error());
$result = mysql_query("select `entity_pk_value`,`review_id` from `{$pref}rating_option_vote`") or die(mysql_error());
for ($i=0;$i<mysql_num_rows($result);$i++) {
$row = mysql_fetch_array($result);
$exists = mysql_query("select `entity_pk_value`,`review_id` from `{$pref}review` where `review_id`=".$row['review_id']) or die(mysql_error());
if (!mysql_num_rows($exists)) {
$query = "insert into `{$pref}review`(`entity_pk_value`,`review_id`,`entity_id`,`status_id`,`created_at`) values({$row['entity_pk_value']},{$row['review_id']},1,1,from_unixtime(unix_timestamp('2013-01-01 01:00:00')+floor(rand()*31536000)))";
echo "Inserting {$row['review_id']}<br>";
mysql_query($query) or die(mysql_error());
}
}
日期或评论是在 2013 年的某个地方随机生成的。