Joomla - 使用另一个SELECT查询中的变量更新表字段

时间:2013-12-05 15:57:35

标签: php mysql gridview sql-update joomla1.5

我的网站在Joomla 1.5.26中运行,我使用SELECT查询将文件名路径转换为上次修改日期并在页面上打印内容:

$db =& JFactory::getDBO();
$query = "
SELECT `filename`
FROM `#__joomlatable`
WHERE `filename` != '';
";
$db->setQuery($query);
$options = $db->loadAssocList();
foreach ( $options as $o ) {
if (file_exists($o[filename])) {
    echo date ("F d Y H:i:s.", filemtime($o[filename]));
    $test = date ("F d Y H:i:s.", filemtime($o[filename]));

}
}

如您所见,我在屏幕上打印各种日期,同时将日期分配给值 $ test

我的表格还包含一个名为日期的字段,其中包含空值。我想要做的是在表格中的日期字段值中填充%test 的值。

所以在写完第一段代码之后:

$db2 =& JFactory::getDBO();
$query2 = "
UPDATE `#__joomlatable`
SET `date` = '$test'
WHERE `filename` != '';
";
$db2->setQuery($query2);
$options2 = $db2->loadAssocList();

但它的作用是填充所有记录中的日期列,其日期值似乎是第一个查询请求的最后一个日期值。我认为它需要处于循环中,但由于我对PHP / Mysql缺乏经验,我无法想到任何事情。

你能帮帮忙吗?

1 个答案:

答案 0 :(得分:0)

确实,您需要对结果进行循环并分别更新每个文件记录。

以下是代码的外观:

$db =& JFactory::getDBO();
$query = "
SELECT `filename`
FROM `#__joomlatable`
WHERE `filename` != '';
";
$db->setQuery($query);
$options = $db->loadAssocList();

$fileInfo = array();

//store in fileInfo the modified time for each file
foreach ( $options as $o ) {
    if (file_exists($o['filename'])) {
        $fileInfo[ $o['filename'] = filetime( $o['filename'] );
    }
}

//now for each file we found we store the modified time in the database
foreach( $fileInfo as $filename => $time ){
    $query2 = "
    UPDATE `#__joomlatable`
    SET `date` = '$time'
    WHERE `filename` = '$filename';
    ";
    $db2->setQuery($query2);
    $options2 = $db2->query(); 
}