データベースの編成方法が原因で、正しい結果セットを 1 行にまとめることができません。次の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 を 1 つの行として戻したいので、メタ値 2 は a: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ループを入れて、データベース内のデータの2行ごとにスキップしますか? それを配列にロードし、配列内の 2 行をループする必要がありますか?