由于数据库的组织方式,我无法将正确的结果集合成一行。 我使用以下SQL:
SELECT ord.ID, ord.post_date, ord.post_status, ord.post_type,
meta.meta_value, term.term_id, term.name,
SUBSTRING(meta.meta_value,LOCATE('\"id\";i:', meta.meta_value)+7,3) AS prodID,
user.user_email
FROM wp_posts ord
INNER JOIN wp_postmeta meta ON meta.post_id = ord.ID
INNER JOIN wp_term_relationships rel ON ord.ID = rel.object_id
INNER JOIN wp_terms term on term.term_id = rel.term_taxonomy_id
LEFT JOIN wp_users user ON user.ID = meta.meta_value
WHERE ord.post_type = 'shop_order'
AND (meta.meta_key = '_customer_user' OR meta.meta_key = '_order_items')
AND ord.post_date >= DATE_SUB(NOW(), INTERVAL 2 HOUR)
AND ord.post_status <> 'trash'
AND term.term_id = 34
ORDER BY `ord`.`ID` DESC
结果是:
ID Descending post_date post_status post_type meta_value term_id name prodID user_email
451 2013-02-02 10:24:00 publish shop_order 2 34 processing sales@proxyplayer.co.uk
451 2013-02-02 10:24:00 publish shop_order a:1:{i:0;a:10:{s:2:"id";s:3:"339";s:12:"variation_... 34 processing 338 NULL
理想情况下,我想将meta.meta_value作为一行, 因此,元值2将与:1:{i:0; a:10:{s:2:“id”; i:338; s:12:“variation_id”; ...
但是,我不认为我可以在这个实例中这样做,因为meta_value在元表中有2个单独的行。
所以,我认为我可以在PHP中控制它并获得值2和值338。 但是我怎么能在while循环中做到这一点?
while ($squid = mysql_fetch_array($result, MYSQL_ASSOC)) {
//1st row
//2nd row
//processing code
}
我是否在其中添加了一个额外的while循环来跳过db中每2行数据? 我应该将它加载到数组中并循环遍历数组中的2行吗?
答案 0 :(得分:0)
你需要在PHP中执行此操作是正确的:MySQL不了解PHP的序列化数据格式。
但是,您不需要像您说的那样跳过行。在循环外创建一个存储$ ID的数组 - &gt; meta_data关系。我不知道你想如何连接它们,但请看这个例子。
$squArr = array();
while($squid = mysql_fetch_assoc...) // I'm using fetch assoc so I can use the row names as array indices
{
$rowID = $squid['ID'];
$rowMeta = $squid['meta_value'];
$squArr[$rowID][] = $rowMeta;
}
这里,这将为每个ID创建一个元数据数组。您可以使用不同的操作替换while循环的最后一行中的操作。
答案 1 :(得分:0)
如果要获取数组中的所有行,可以执行以下操作:
$results = array();
while ($squid = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (isset($results[$squid['ID']))
{
// row with index ID already added, modify existing row
$results[$squid['ID']]['meta_value'] .= ';' . $squid['meta_value'];
}
else
{
// add new row, using the ID as the index
$results[$squid['ID']] = $squid;
}
}
您可能需要在循环之后放置processing code
,因为循环中的数据未完成,即使您不使用meta_value
,也不希望两次执行任何操作。