-1

MySQL データベース (phpBB3 で作成) からユーザー/プロファイル情報を HTML ページに表示しようとしています。名前、住所、電話番号、Web サイト、およびその他のさまざまなプロファイル フィールドなど、すべてのユーザーのリストを表示する Web サイトにパブリック (phpBB とは関係ありません) ページを作成したいと考えています。この情報がすべて 1 つのテーブルにあれば、問題はありません。しかし、phpBB はカスタム プロファイル エントリを別のテーブルに一覧表示します。私は、php や MySQL のクエリはあまり得意ではありません。私の人生では、テーブルをマージすることはできません。私はこのコードの約 50 の異なるバージョンを持っていますが、どれも思い通りに動作しません。

<?php

$con = mysql_connect( 'hostname', 'username', 'password' );
$db =  mysql_select_db( 'dbname' );

//now write a select query to fetch the records from the table

$sql = "select * from phpbb_users";
$query = mysql_query( $sql );

echo "<table border=1>";

//now read and display the entire row of a table one by one looping through it.
//to loop we are using While condition here

while( $row = mysql_fetch_assoc($query) )
{
echo "<tr><td>$row[user_email]</td>";
echo "<td>$row[user_website]</td>";
echo "<td>$row[user_avatar]</td></tr>";
}

echo "</table>";

$sql = "select * from phpbb_profile_fields_data";
$query = mysql_query( $sql );

echo "<table border=1>";

//now read and display the entire row of a table one by one looping through it.
//to loop we are using While condition here

while( $row = mysql_fetch_assoc($query) )
{
echo "<tr><td>$row[pf_name]</td>";
echo "<td>$row[pf_business]</td>";
echo "<td>$row[pf_address]</td>";
echo "<td>$row[pf_phone]</td>";
echo "<td>$row[pf_officer]</td></tr>";
}

echo "</table>";

?>

これにより、含めるすべてのデータを含む 2 つの個別のテーブルが表示されます。これらのテーブルを 1 つとして表示したいだけです。2 番目のテーブルには、最初に表示したい情報が含まれていますが、最初のテーブルの残りのデータとインラインになっています。私はこれがばかげた質問であることを知っています. ごめんなさい。実現しようとする前は、これはとても簡単に思えました。ご協力いただきありがとうございます!:)

更新されたコード:

<?php

$con = mysql_connect( 'hostname', 'username', 'password' );
$db =  mysql_select_db( 'dbname' );

$sql = "select * from phpbb_users left join phpbb_profile_fields_data on phpbb_profile_fields_data.user_id = phpbb_users.id";
$query = mysql_query( $sql );


echo "<table>";


while( $row = mysql_fetch_assoc($query) )
{
echo "<tr><td>$row[user_avatar]</td>";
echo "<td>$row[pf_name]</td>";
echo "<td>$row[pf_business]</td>";
echo "<td>$row[pf_address]</td>";
echo "<td>$row[pf_phone]</td>";
echo "<td>$row[user_email]</td>";
echo "<td>$row[user_website]</td>";
echo "<td>$row[pf_officer]</td></tr>";
}

echo "</table>";

?>
4

2 に答える 2

1

テーブル構造はわかりませんが、以下に例を示します。

select * from phpbb_users join phpbb_profile_fields_data on phpbb_profile_fields_data.user_id = phpbb_users.id

注意: 2 番目のテーブルに一致する行がない可能性がある場合は、'...left join...' を使用します。

$sql = "
SELECT * 
FROM phpbb_users 
LEFT JOIN phpbb_profile_fields_data ON 
     phpbb_profile_fields_data.user_id = phpbb_users.id
";
// QUESTION: should the above be phpbb_users.user_id as you mentioned in comments
$query = mysql_query( $sql );


echo '<table>';

while( $row = mysql_fetch_assoc($query) )
{
     echo '<tr>';
     echo '<td>' . $row['user_avatar'] . '</td>';
     // ...
     echo '<td>' . $row['pf_officer'] . '</td>';
     echo '</tr>';
}

echo '</table>';
于 2013-05-15T04:21:20.400 に答える
0

わかりました-私の問題はクエリにありました。「phpbb_profile_fields_data.user_id = phpbb_users.* user_ *id」であるはずの「phpbb_profile_fields_data.user_id = phpbb_users.id」があったことを盲目的に見逃しました

Facepalm、わかっています....わかっています....あなたの助けと親切に本当に感謝しています! 以下は、誰かがこれに出くわして必要になった場合に備えて、私のコードの作業コピーです。:) ありがとうございました!

<?php

$con = mysql_connect( 'hostname', 'username', 'password' );
$db =  mysql_select_db( 'db_name' );

$sql = "select * from phpbb_users left join phpbb_profile_fields_data on phpbb_profile_fields_data.user_id = phpbb_users.user_id";
$query = mysql_query( $sql );

if (!$query) { echo "Error: ".mysql_error(); die(); }

echo "<table>";

while( $row = mysql_fetch_assoc($query) )
{
echo "<tr><td>$row[user_avatar]</td>";
echo "<td>$row[pf_name]</td>";
echo "<td>$row[pf_business]</td>";
echo "<td>$row[pf_address]</td>";
echo "<td>$row[pf_phone]</td>";
echo "<td>$row[user_email]</td>";
echo "<td>$row[user_website]</td>";
echo "<td>$row[pf_officer]</td></tr>";
}

echo "</table>";

?>
于 2013-05-15T13:10:06.727 に答える