2012-10-18 36 views
-1

我正在使用Wordpress,我必須弄清楚如何從同一列中獲取多個值並將它們變爲變量。從表格列中獲取多個值到重複行中

的最後一步是我只是想將數據以表格像這樣顯示:

Bob Company1 <br> 
Alex Company2 

相反,我得到任何Bob Alex Company1 Company 2

Bob <br> 
Alex<br> 
Company1<br> 
Company2 

這裏是我工作的兩個不同版本與:

$sql = "SELECT meta_value as guest from wp_postmeta INNER JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id WHERE post_type='guests' AND meta_key='guest_name' UNION SELECT meta_value as company from wp_postmeta INNER JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id WHERE post_type='guests' AND meta_key='guests_company'"; 
$result = mysql_query($sql); 
$NumberOfResults=mysql_num_rows($result); 

if (mysql_num_rows($result) == 0) { 
    echo "No Guests yet... stay tuned!"; 
    exit; 
} 

while(list($guest,$company)= mysql_fetch_row($result)) 
{ 
    echo "<table><tr><td>".$guest."</td><td>".$company."</td></tr></table>"; 
} 

$sql = mysql_query("SELECT meta_value as guest from wp_postmeta INNER JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id WHERE post_type='guests' AND meta_key='guest_name' LIMIT 2 UNION SELECT meta_value as company from wp_postmeta INNER JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id WHERE post_type='guests' AND meta_key='guests_company'"); 

$i = 1; 
while ($get = mysql_fetch_array($sql)) 
{ 
    echo '<table><tr><td>'.$get["guest"].'</td><td>'.$get["company"].'</td></tr></table>'; 

    $i++; 
} 

任何幫助將如此讚賞!謝謝!

編輯:在未來的情況下,任何人想要創建一個使用WordPress的在高級定製領域自己的小部件,這裏的最終產品或多或少:

$sql = "SELECT p.ID AS post_id, g.meta_value as guest, c.meta_value as company, d.meta_value as date 
FROM wp_posts p 
JOIN wp_postmeta g ON g.post_id = p.id AND g.meta_key = 'guest_name' 
JOIN wp_postmeta c ON c.post_id = p.id AND c.meta_key = 'guests_company' 
JOIN wp_postmeta d ON d.post_id = p.id AND d.meta_key = 'show_date' 
WHERE p.post_status = 'publish' 
ORDER by d.meta_value DESC"; 

$query = mysql_query($sql); 


echo '<table><tr><th>Guest</th><th>Company</th><th>Show Date</th></tr>'; 
while ($get = mysql_fetch_array($query)) {$newDate = date("m-d-Y", strtotime($get["date"])); 
    echo '<tr><td><a href="http://yoururl.com/?p='.$get["post_id"].'">'.$get["guest"].'</a></td><td>'.$get["company"].'</td><td>'.$newDate.'</td></tr>'; 
} 
echo '</table>'; 

真的很感激doublesharp對這一幫助。

+1

打印結果數組以更清晰地解答您的問題。 – Manoj

回答

0

如果postmeta值被連接到不同的職位由不同的「post_type」值表明了自己的查詢,那麼您將需要一些其他識別信息將它們鏈接在一起。如果有一個單獨的post_id同時具有guest_nameguest_company meta_value,那麼您可以加入它兩次以獲得結果。使用UNION將始終導致它們返回到不同的行中。

// Join the postmeta table to posts twice, once for each meta_key. 
$sql = <<<SQL 
SELECT p.ID AS post_id, g.meta_value as guest, c.meta_value as company 
FROM wp_posts p 
JOIN wp_postmeta g ON g.post_id = p.id AND g.meta_key = 'guest_name' 
JOIN wp_postmeta c ON c.post_id = p.id AND c.meta_key = 'guests_company' 
WHERE p.post_status = 'publish' 
SQL; 

// Execute the query 
$query = mysql_query($sql); 

// Start your table for output 
echo '<table>'; 
while ($get = mysql_fetch_array($query)) { 
    // Write the output of each row 
    echo '<tr><td>'.$get["guest"].'</td><td>'.$get["company"].'</td></tr>'; 
} 
// Close the table 
echo '</table>'; 

如果這是在Wordpress中,我會建議使用$wpdb對象進行查詢。

+0

謝謝你這麼多doublesharp!感謝所有人的幫助。對不起,我沒有打印數組。當我這樣做時,我知道有什麼地方出錯了,那是因爲UNION使它成爲不同的行。我試圖在wordpress中做到這一點,但這是一場噩夢,而這只是因爲他們將所有內容都存儲在同一列中,或者我早就完成了。 – 88al88

+0

我知道如何添加其他元鍵,但我沒有得到如何使它只發布帖子。我需要加入嗎? $ sql =「SELECT p.ID AS post_id,g.meta_value as guest,c.meta_value as company FROM wp_posts p WHERE post_status ON p.ID ='publish'JOIN wp_postmeta g ON g.post_id = p.id AND g.meta_key ='guest_name'JOIN wp_postmeta c ON c.post_id = p.id AND c.meta_key ='guests_company'「; – 88al88

+0

只需添加'WHERE p.post_status ='publish'' - 查看我對更新SQL的回答。 – doublesharp

1

如果我正確理解你的問題,你必須編寫代碼來這樣的顯示錶:

echo '<table>'; 
while ($get = mysql_fetch_array($sql)) 
{ 
    echo '<tr><td>'.$get["guest"].'</td><td>'.$get["company"].'</td></tr>'; 

} 
echo '</table>';