MySQL - 在 SQL 过程中使用 foreach 排序

标签 mysql loops foreach

我一直在寻找某种方法来使用 MySQL 查询创建“Foreach”。

我知道如果是 PHP 或 Java 我会怎么做,但我希望全部都是 MySQL。

所以,我将创建一种“理论”MySQL 情况,因为原始查询有很多不必要的信息,我觉得这些信息混淆了问题的范围。

我设想的是以这种方式工作的东西(这将是 php 和 mysql 伪代码的丑陋困惑。)

@rooms = ('master_bedroom'=>'MBS_MASTER_BEDROOM_SIZE',
'bed_room2' = 'B2S_BR_2_SIZE')
 FOREACH(@rooms as @room=>@column_name)
 {
      UPDATE `relative_room_sizes` SET area = CALCULATE_AREA(`buildings`.@column_name)
      WHERE `idx_computed_values`.`room_type` = @room 
      AND `idx_computed_values`.`computed_size` = 'large'
 }

我是不是想得太过分了,还是 MySQL 的一些非常基本的功能我在发现时遇到了很多困难?我在这里做了很多搜索,但任何类型的 foreach 往往都与使用实际的编程语言来处理这种肮脏的工作有关。

编辑: 这是我想在该过程中实现的想法,但我是用 PHP 实现的,因为...这就是我所知道的:)... 本质上,我希望能够有一个过程来执行此 PHP 代码将输出的操作,并希望以同样紧凑的方式。

<?php
$rooms = array(
'master_bedroom' => 'MBS_MASTER_BEDROOM_SIZE',
'bed_room2' => 'B2S_BR_2_SIZE',
'bed_room3' => 'B3S_BR_3_SIZE',
'bed_room4' => 'B4S_BR_4_SIZE',
'living_room' => 'LRS_LIVING_ROOM_SIZE',
'dining_room' => 'DRS_DINING_ROOM_SIZE ',
'kitchen' => 'KTS_KITCHEN_SIZE',
'family_room' => 'FRS_FAMILY_ROOM_SIZE');

$room_sizes = array('large','small');
$table_with_properties = 'idx_search';

?>
<?foreach($rooms as $room_type=>$column_name):?>
    <?foreach ($room_sizes as $room_size):?>
    #Initialize field in case it isn't already declared
    INSERT INTO `idx_computed_values` (`room_type`,`computed_size`,`area`)
    values ('<?=$room_type?>','<?=$room_size?>',0)
    ON DUPLICATE KEY UPDATE `computed_size` = `computed_size`;

    UPDATE `idx_computed_values` SET area = 
    (SELECT AVG(CALCULATE_AREA(`<?=$table_with_properties?>`.<?=$column_name?>))<? if($room_size == 'large'):?>+<?php endif;?><? if($room_size == 'small'):?>-<?php endif;?> 
         (0.6 * STDDEV(CALCULATE_AREA(`idx_search`.<?=$column_name?>))) 
         FROM `<?=$table_with_properties?>`
         WHERE `<?=$column_name?>` IS NOT NULL )
    WHERE `idx_computed_values`.`room_type` = '<?=$room_type?>'
    AND `idx_computed_values`.`computed_size` = '<?=$room_size?>';

    <? endforeach;?>
<? endforeach;?>

最佳答案

听起来您想创建一个存储过程。假设“数组”来自查询结果,则必须使用游标。 MySQL 的文档有一个示例,您可以引用 http://dev.mysql.com/doc/refman/5.0/en/cursors.htmlhttp://dev.mysql.com/doc/refman/5.0/en/create-procedure.html .

关于MySQL - 在 SQL 过程中使用 foreach 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434967/

相关文章:

php - 如何在 postgres 中使用 pgcrypto 来散列密码

php - 使用 while/foreach 构建复杂的表

mysql -\!某些命令在远程 mysql 连接中无法正常工作

php - Symfony2 - 使用多对多关系保存数据

c++ - cin 在 12 次 for 循环迭代后使我的程序崩溃?

java - 在不使用任何循环或条件的情况下打印特定范围内的数字 (Java)

java - 使用 for 每个循环来打印对象

PHP PDO 获取结果

mysql - Sequelize 具有相同外键的多对多表覆盖值

java - java for循环的效率