2017-07-14 8 views
1

私のデータベースには次の3つのテーブルがあります。特定のタグを持つすべての画像を取得するには、あまりにも多くのMySQLクエリを使用していますか?

Table: Images 
Columns: Image_ID, Title, Description, Author, Date, Path, Rating 

Table: Tags 
Columns: Tag_ID, Title 

Table: TagsConnection 
Columns: Image_ID, Tag_ID 

特定のタグに対応するすべての画像を取得するために、このコードを実行します。

<?php 

    $tagName = $_SERVER['QUERY_STRING']; 
    $realTagName = substr($tagName, 1); 
    $realestTagName = str_replace('%20', ' ', $realTagName); 

    $sql = "SELECT * FROM tags WHERE tag='$realestTagName'"; 
    $result = mysqli_query($conn, $sql); 
    $getResult = mysqli_fetch_assoc($result); 
    $tagId = $getResult['id']; 

    $sql2 = "SELECT * FROM tagsconnection WHERE tagid='$tagId'"; 
    $result2 = mysqli_query($conn, $sql2); 

    while ($row = mysqli_fetch_assoc($result2)) { 
     $imageId = $row['imageid']; 
     $sql3 = "SELECT * FROM image WHERE id='$imageId'"; 
     $result3 = mysqli_query($conn, $sql3); 
     $getResult3 = mysqli_fetch_assoc($result3); 
     echo '<div class="imageContainer"> 
       <h1>'.$getResult3['name'].'</h1> 
       <a href="imageInfo.php?='.$getResult3["path"].'"> 
       <img class="uploadedImg" src="uploads/'.$getResult3["path"] .'" alt="Random image" /> 
       </a> 
       </div>'; 
    } 


?> 

私はそれにそれが行われるべき方法をやっていないよ、この悪い感じを持っているので、私はここの周りに尋ねると、可能であればいくつかのヒントやポインタを取得することを決めました。

+0

あなたのコードは[** SQLインジェクションの脆弱性であります**](https://en.wikipedia.org/wiki/SQL_injection)の攻撃。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この投稿**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には良い例があります –

+0

[Joins ](https://stackoverflow.com/documentation/sql/261/join#t=201707141726181817712)。 – cteski

+1

経験則として、クエリインループは、ほとんどの場合、ループの前にある「結合」に抽出できます。 – colburton

答えて

0

参加を使用すると、ここに加入すると、あなた慣れていない場合、それは

SELECT * FROM tags 
JOIN tagsconnection ON tagsconnection.tagid=tags.id 
JOIN image ON image.id=tagsconnection.imageId 
WHERE tag=$realestTagName 

て見える場合がありますかの基本的な例ですが、ここで良いチュートリアルだ https://www.w3schools.com/sql/sql_join.asp

+0

...ここで、Vennダイアグラムで説明されている結合についてのリンクがあります(https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)。 –

関連する問題