【问题标题】:work with mysql array data in PHP在 PHP 中处理 mysql 数组数据
【发布时间】:2015-04-11 15:40:54
【问题描述】:

在这种情况下如何转换数组数据以使用它?特别是在wordpress中。 当我打印结果时,我得到了 stdClass 对象。

Array
(
    [0] => stdClass Object
        (
            [posts_id] => 336
            [value] => 8
            [count(*)] => 2
        )

    [1] => stdClass Object
        (
            [posts_id] => 329
            [value] => 2
            [count(*)] => 1
        )

    [2] => stdClass Object
        (
            [posts_id] => 327
            [value] => 3
            [count(*)] => 1
        )

    [3] => stdClass Object
        (
            [posts_id] => 338
            [value] => 1
            [count(*)] => 1
        )

)

这是我的查询

   <?php global $wpdb;

$test = $wpdb->get_results('select
    posts_id,
    value,
    count(*)
From
    wp_mrp_rating_item_entry_value
group by
    posts_id,
    value
order by
    count(*) desc'); 
echo '<pre>';
print_r($test);
echo '</pre>';

如何从这个数组中获取数据以保存到另一个数据库表中?或者我怎样才能至少将单个值保存到每个 id 的变量中?我尝试分配但我还不知道所以我希望有人比我更了解它?感谢您的帮助。

【问题讨论】:

  • 你的意思是把数据保存到其他表吗? INSERT 也许?
  • @Raptor 哦,是的,请保存。我的折叠。有什么想法吗?

标签: php mysql arrays wordpress


【解决方案1】:

foreach($test as $item) :

$ID = $item->posts_id; 
var_dump($ID); //test variable


//if you want to place into the db 

   //DB CODE>>>

$firstName = "Dylan"  //example of field in db to change
$LastName =  "bloggs" //example of second field in db to change

$wpdb->query( $wpdb->prepare( 
	"
		INSERT INTO $wpdb->name_of_wp_table_goes_here
		( name_of_field_goes_here )
		VALUES ( %d, %s, $s ) 
	", 
    $ID,
    $field
) );

   //<<<DB END

endforeach; 

如果您想手动存储到数据库中,请删除数据库代码。

您也可以以同样的方式访问其他密钥。例如,$value = $item->value; -- 你可以把它放在 foreach 循环中并继续。

【讨论】:

  • 非常感谢。那很完美。这里有很多有用且有效的答案。你的正好合适。成就了我的一天。感谢你和其他人。来自柏林的问候
【解决方案2】:

在 Wordpress 中,当您使用 get_results 时,您可以选择脱水模式:

输出类型 三个预定义常量之一。默认为对象。 OBJECT - 结果将作为对象输出。 ARRAY_A - 结果将作为关联数组输出。 ARRAY_N - 结果将作为数字索引数组输出。

所以如果你这样做:

$test = $wpdb->get_results('select
posts_id,
value,
count(*)
From
wp_mrp_rating_item_entry_value
group by
posts_id,
value
order by
count(*) desc', ARRAY_N); 

你应该得到一个数组作为结果。

【讨论】:

    【解决方案3】:

    由于这是对象数组,您可以使用简单的 foreach 来访问您的值:

    <?php
        foreach ($test as $t) {
            $t->post_id;
            $t->value;
            // You can insert your values in different table here
        }
    ?>
    

    对于计数,您可以将查询更改为:

    SELECT posts_id, value, COUNT(*) AS cnt FROM
        wp_mrp_rating_item_entry_value
    GROUP BY
        posts_id,
        value
    ORDER BY
        COUNT(*) DESC
    

    因此您在 foreach-loop 中的计数将可以访问 $t->cnt。

    【讨论】:

    • 最后一个问题:如何才能获得 (cnt) 的最高值? MAX() 似乎不适用于查询中的 count(*),知道吗?谢谢你
    【解决方案4】:

    你有一个对象数组,这是一个非常好的结构。您需要做的就是处理数组。

    对于表格插入的 WordPress 机制,我无法为您提供帮助,但伪代码可能是这样的。

    首先,给计数起一个更有用的名称是个好主意

    $test = $wpdb->get_results('select
        posts_id, value,count(*) as how_many
    From wp_mrp_rating_item_entry_value
    group by
        posts_id, value
    order by count(*) desc'); 
    

    现在处理对象数组的每次出现

    foreach ($test as $obj) {
        // Use these fields in an Insert statement
        $sql = "INSERT INTO TableName (f1,f2,f3)
                VALUES ({$obj->post_id}, 
                        {$obj->value}, 
                        {$obj->how_many}");
        // WP command to issue a query
    }
    

    【讨论】:

    • 感谢伙伴,通过 wp 修改,这对我的目的非常有用。
    • 我现在就这样使用它 foreach ($test as $obj) { $wpdb->insert( 'Toplist', array( 'postid' => $obj->posts_id, 'category' = > $obj->value, 'votingcount' => $obj->how_many ), array( '%d', '%s', '%s' ) );再次感谢你真棒。
    • 最后一个问题:我将如何获得 (how_many) 的最高值? MAX() 似乎不适用于查询中的 count(*),知道吗??
    • JImmy,如果您还有其他问题,您真的应该再问一个问题。
    【解决方案5】:
    //Just use type cast brother. Use
    
    $test = (array) $test;
    
    //print_r($test);
    
    foreach($test as $item) :
    
    //if you want to place into the db 
    $wpdb->query( $wpdb->prepare( 
        "INSERT INTO $wpdb->name_of_wp_table_goes_here
            ( post_id,value,count )
            VALUES (".$item['post_id'].", '".$item['value']."', ".$item['count'].")
        %d",  
        1
    ) );
    
    endforeach;
    

    【讨论】:

    • OP 想要将数据保存到另一个表中。
    • 谢谢队友。现在我得到了整个数组,但是我将如何使用数组的单个值(如 $ID = .... ; $value=....; $count =. ..; 现在要使用它。我需要更新(或将其保存到)另一个表。我需要为每个 id 使用这个。所以我想它必须在一个循环中。!?谢谢
    • 最后一个问题:我将如何获得 (count) 的最高值? MAX() 似乎不适用于查询中的 count(*),知道吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2012-09-23
    • 2019-11-09
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多