-1

次の単純な検索コードがあります。

 <?php

mysql_connect ("localhost", "xxx","xxx")  or die (mysql_error());
mysql_select_db ("xxx");

$term = $_POST['term'];

$sql = mysql_query("select * from attendees where Surname like '%$term%' or Name like'%$term%' ");

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/><br/>';
}
?>

これは正常に機能し、出席者テーブルから要求されたデータを表示しますが、各結果とともに画像も表示したいと考えています。ここでの問題は、画像へのパスが「パス」列の「画像」テーブルにあることです。出席者テーブルの列 id_attendees と画像テーブルの列 id_images は同じであるため、たとえば id_attendees が 4 の場合、id_images=4 の行には列 "path" にイメージパスが含まれます。では、ここでこのパスを呼び出すにはどうすればよいでしょうか。

4

5 に答える 5

1

左結合を使用する

$sql = mysql_query("select * from attendees a
                       left join images i on a.id_attendees = i.id_images
                       where a.Surname like '%$term%' or a.Name like'%$term%' ");

これは出席者を画像で結合し、参加者と一致するIDがないことを確認してから、画像に対してnullを表示します....

そして、stackoverflow の誰もが推奨するように... mysqli を使用することをお勧めします。

この拡張モジュールは PHP 5.5.0 で非推奨になり、将来的に削除される予定です。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。

于 2013-03-27T09:27:25.143 に答える
0

テーブルのリンクに関しては常にジョイントを使用してください。あなたの状況では、次のようになります。

$query = "select a.*, i.path
          from attendees a
             inner join images i ON i.id_images = a.id_attendees
          where a.Surname like '%$term%' or a.Name like'%$term%'"

これについてさらに理解するには、これをチェックしてくださいhttp://phpweby.com/tutorials/mysql/32

于 2013-03-27T09:33:20.600 に答える
0

mysql_* 関数の使用はお勧めできません。

ともかく; これは単純な JOIN で記述できます。

SELECT whatever, you, want
FROM attendees JOIN id_attendees = id_images
WHERE ... your current where clause

現在のように、必要なすべての列を (選択している限り) 使用できます。

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];

echo '<img src="'.$row['image_path'].'" />'; // YOUR IMAGE

echo '<br/><br/>';
}

注:あなたのコードはmysql_関数を使用していますが、これはお勧めできません。また、現在のコードには SQL インジェクションの脆弱性が高いことに注意してください。mysql_real_escape_string を使用して、データがエスケープされていることを確認するか、PDO または何かを正しい方法で使用してこれを防止し、優れたシステムの利点を得てください。

于 2013-03-27T09:27:50.077 に答える
0

INNER JOIN画像パスを取得するために画像テーブルを結合するために使用できます

mysql_connect ("localhost", "xxx","xxx")  or die (mysql_error());
mysql_select_db ("xxx");

// Note that you have to escape your search term to prevent SQL Injection
$term = mysql_real_escape_string($_POST['term']);

$sql = mysql_query("SELECT a.*, i.imagepath 
                    FROM attendees a 
                    JOIN images i
                      ON i.id_images=a.id_attendees
                    WHERE a.Surname LIKE '%$term%' OR a.Name LIKE '%$term%' ");

while ($row = mysql_fetch_array($sql)){
  echo '<br/> Name: '.$row['Name'];
  echo '<br/> Last Name: '.$row['Surname'];
  echo '<br/> E-Mail: '.$row['email'];
  echo '<br/><br/>';
}

mysql_*関数は廃止されているため、MySQLi または PDO を使用する必要があります。

于 2013-03-27T09:29:44.087 に答える
0
mysql_connect ("localhost", "xxx","xxx") or die (mysql_error());<p>
mysql_select_db ("xxx");

$term = $_POST['term'];

$sql = mysql_query("SELECT t1.*, t2.* FROM attendees t1 LEFT JOIN images t2 ON t1.id_attendees=t2.id_images WHERE t1.Surname LIKE '%$term%' OR t1.Name LIKE'%$term%' ");

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/> Image: <img alt="img" src="' . $row['path'] . '">';
echo '<br/><br/>';

}
于 2013-03-28T10:26:18.810 に答える