2016-08-06 6 views
0

MySqlでブログコンテンツを保存したテーブルとブログIDと別の写真パスを保存したテーブルを作成しました。 1つのpostIDに複数の写真を保存しました。今私は写真とブログの投稿を同時に取ってみようとしているが、それは動作していない。以下のコード...PHPのループ内ループループ

blogposts.php

<?php 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$result = mysqli_query($conn,"SELECT * , upload_data.FILE_NAME from blog_posts LEFT JOIN upload_data ON blog_posts.postID=upload_data.postID ; "); 
while($row = mysqli_fetch_array($result)) 
{?> 

    <div class="b-slider j-smallslider" data-height="382"> 
        <ul><?php 
        if (!empty($FILE_NAME)) { 
        $result = mysqli_query($conn,"SELECT * from upload_data where postID=postID ; "); 
       while($row = mysqli_fetch_array($result)) 

        {?> 
          <li data-transition="3dcurtain-vertical" data-slotamount="12"> 
          <img data-retina src="articles/user_data/<?php echo(htmlspecialchars($row['FILE_NAME'])); ?>"> 
         </li> <?php }} ?> 
        </ul> 
       </div> 
<div class="b-blog-one-column__info"> 
     Title : <a href="#" class="f-more"><?php echo(htmlspecialchars($row['postTitle'])); ?></a>, <a href="#" class="f-more"><?php echo(htmlspecialchars($row['postCat'])); ?></a> 
     <span class="b-blog-one-column__info_delimiter"></span> 
     Tag : <a href="#" class="f-more">Nllam</a> 
     <span class="b-blog-one-column__info_delimiter"></span> 
     <a href="#" class="f-more f-primary"><i class="fa fa-comment"></i>12 Comments</a> 
    </div> 
<?php } ?> 

問題は、私は写真を取得することができませんです。 :(

+0

「ループ内でクエリを実行しないでください」という経験則があります。この場合、必要なデータは最初のクエリで既に返されているため、2番目のクエリは完全に冗長に見えます。 – Strawberry

+0

どのように私はそれを行う必要がありますスライダーとポストは、ループなしでそれに関連する? @Strawberry –

+0

'私は1つのpostIDに複数の写真を保存しました'私はこれが何を意味するのかよく分かりません。 – Strawberry

答えて

1

使用このクエリその後、

$result = mysqli_query($conn,"SELECT blog_posts.* , upload_data.FILE_NAME from blog_posts,upload_data WHERE blog_posts.postID=upload_data.postID"); 

ますprint_r()機能を使用して結果を印刷し、その取得結果を確認するか、ではない。

+0

その結果が回答を受け入れてこの質問を閉じる場合:) – shubham715

+0

結果は得られますが、スライダ3つまたは4つのpicxと1つのポストの代わりに3つまたは4つの結果を得る。 –

+0

serialize()関数でイメージを1行に格納することができます。次に、すべてのイメージを1つの配列に格納し、その配列をシリアル化する必要があります。 。複数の行にイメージを格納する場合は、2つのクエリを実行してすべてのイメージを取得できます。 – shubham715

0
SELECT blog_posts.*, group_concat(upload_data.FILE_NAME) FROM `blog_posts` 
LEFT JOIN upload_data on blog_posts.postID = upload_data.postID 
GROUP BY blog_posts.postID 

することで、数を取得します。このようにしてくださいあなたがイメージを持っている場合は、カンマで区切られた行末とファイル名が表示されます。次にロジックを適用して結果を表示します。必要な助けを借りてください。

+0

シングルポストのpicxを取得するためのクエリは何ですか? @kaja –

+0

where句 –

0

この作品が欲しいです。

$post_id = 1337; 
$conn = new PDO(......); //get connection 
$conn->query('SET group_concat_max_len = 4096;'); 
$query = "SELECT bp.* , 
      (SELECT GROUP_CONCAT(ud.FILE_NAME SEPARATOR ',') 
      from upload_data ud where ud.postID=bp.postID) as files 
      FROM blog_posts bp 
      WHERE bp.postID=:post_id ;"; 
$result = $conn->prepare($query); 
$result->bindParam(":post_id", $post_id); 
$result->execute(); 

//don't really need while for one row but oh well 
while($row = $result->fetch()){ 

    $files=$row['files']; 
    $files = empty($files) ? [] : explode(',', $files); 
    ?> 

    <div class="b-slider j-smallslider" data-height="382"> 
      <ul> 
      <?php foreach ($files as $file){?> 
       <li data-transition="3dcurtain-vertical" data-slotamount="12"> 
        <img data-retina src="articles/user_data/<?php echo(htmlspecialchars($file)); ?>"> 
       </li> 
      <?php } ?> 
      </ul> 
    </div> 
    <div class="b-blog-one-column__info"> 
     Title : <a href="#" class="f-more"><?php echo(htmlspecialchars($row['postTitle'])); ?></a>, <a href="#" class="f-more"><?php echo(htmlspecialchars($row['postCat'])); ?></a> 
     <span class="b-blog-one-column__info_delimiter"></span> 
     Tag : <a href="#" class="f-more">Nllam</a> 
     <span class="b-blog-one-column__info_delimiter"></span> 
     <a href="#" class="f-more f-primary"><i class="fa fa-comment"></i>12 Comments</a> 
    </div> 
<?php } ?> 
+0

を使用して、1つのスライダ内にすべてのpicxを取得し、1つの投稿のみを取得します。 –

+0

ああ、左の結合の後のwhere文。どこbp.postID = x – dMd

+0

私は構文に精通しているので、申し訳ありませんPDOを使用する必要がありました。グループconcat max lenを設定する必要があります。そうしないと、投稿のファイル数が多すぎます。あなたはconcat文字列の制限を持っているので、メモリの問題が発生します。 – dMd