1
$search_exploded = explode (" ", $search);
foreach($search_exploded as $search_each){
    $x++;
    if($x==1) 
        $construct .="concat_ws(Name, Summary, Description, OpeningHours, Address, Postcode, Keywords) LIKE '%$search_each%' ";
    else
        $construct .="AND concat_ws(Name, Summary, Description, OpeningHours, Address, Postcode, Keywords) LIKE '%$search_each%' ";
}

$construct ="SELECT * FROM Rating, Attraction WHERE $construct" ;
$run = mysql_query($construct);
$foundnum = mysql_num_rows($run);

if ($foundnum==0)
    echo "Sorry, there are no matching result for '$search'" ;
else
{
    echo "";
    while($row = mysql_fetch_assoc($run)){
        echo '<a href="details.php?ID=' . $row['AttractionID'] . '"><img class="attractionimg" src="'. $row['ImageUrl'] . '" height="160" width="210" /></a>';
        echo '<div class="a-textcontain">';
        echo '<h2><a href="details.php?ID=' . $row['AttractionID'] . '">' . $row['Name'] . '</a></h2>'; 
        echo '<p class="a-text">' . $row['Summary'] . '</p>';
        echo '</div>';
        echo '<img class="rating" src="'. $row['RatingUrl'] . '" height="25" width="140" alt="Rating"/>';
        echo '<div class="aborderline"></div>';
        break;
    }
}  

データベースに 12 行のデータがあります。検索すると正しく動作していますが、各検索結果を 12 回繰り返します。「休憩」を入れてみました。上記のように、これにより検索が1つの結果のみに制限されます...

誰にもアイデアはありますか?


$construct = "SELECT Attraction.*, Type.TypeName, Rating.RatingUrl ";

$construct .= "アトラクションから";

$construct .= "INNER JOIN Type ON Attraction.Type = Type.TypeID ";

$construct .= "Attraction.AttractionID = Rating.AttractionID の INNER JOIN 評価";

$construct .= "WHERE Attraction = $construct" ;

4

1 に答える 1

1
SELECT * FROM Rating, Attraction

Ratingの各行が の各行に結合されAttraction、結果が乗算されるマルチテーブル クエリを実行しています。LEFT JOIN意図に応じて、特定の結合条件またはおそらく他の何かを含むクエリが必要になります。

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.htmlhttp://dev.mysql.com/doc/refman/5.1/en/joinを参照してください。 .html .

于 2012-12-07T12:35:39.560 に答える