2017-05-09 4 views
0

mysqli_fetch_assocを使用して、クエリの結果をページにエコーします。残念ながら、それは私に1対1の関係を与えています。MySQL PHPは会話のすべてのメッセージを親レコードでグループ化して表示します

Listing Name Thread ID Guest Name Sent by UserID Message  
Spacious Bedroom 338082922 Daniel 43762688 I can't, I'm sorry. I won't even be around at the end of July. 
Spacious Bedroom 338082922 Daniel 98936811 Are you willing to rent it out at the end of july 
Spacious Bedroom 338082922 Daniel 43762688 Sorry, no room 
Spacious Bedroom 338082922 Daniel 98936811 Hello, I'd like to stay Thanks -Dan  

私は、スレッドID一度ゲスト名かつて一度リストの名前を表示し、次の2人のユーザー間の会話を表示したいと思います。ここでは

は、現在表示している方法ですそれ。

私は会話が上場、スレッドとゲストの下にグループ化することにしたいです。

<table> 
     <tr> 
     <th style="text-align: left; width: 300px;">Listing Name</th> 
     <th style="text-align: left; width: 100px;">Thread ID</th> 
     <th style="text-align: left; width: 100px;">Guest Name</th> 
     <th style="text-align: left; width: 100px;">Sent by User ID</th> 
     <th style="text-align: left; width: 300px;">Message</th> 
     </tr> 
      <?php while($message = mysqli_fetch_assoc($message_set)) { ?> 
     <tr> 
     <td><?php echo htmlentities($message["listingname"]); ?></td><td><?php echo htmlentities($message["thread_id"]); ?></td><td><?php echo htmlentities($message["guest_name"]); ?></td><td><?php echo htmlentities($message["sent_by"]); ?></td><td><?php echo htmlentities($message["msg_body"]); ?></td> 
     </tr> 
      <?php } ?> 
     </table> 
+0

私はおそらくテーブルを少し違うように設計しています。そのため、メッセージは外部キーとして「スレッドID」を持つ別のテーブルにあります。たぶん3つのテーブル、1つのリストが複数のスレッドを持つことができる場合。そう:リスト、スレッド、メッセージ。その後、スレッド(および上場)一度、その特定のスレッドのために、すべてのメッセージをつかむことができました。 – cjs1978

+0

ネストされたループを使用する方法や、mysqlを使用して自身にテーブルを結合する方法はありませんか? – sjackson

+0

結果をループしてメッセージを配列に格納し、最終的にその配列の内容を表示することができます(最初の結果行からリスト名などとともに、これらが完全に一致する場合) – cjs1978

答えて

0

トリックは現在のリスト名を追跡することである。ここでは

は、私は現在、それは私の希望する結果を得ていませんやっているものです。変更された場合はそれを印刷し、それ以外の場合は何も印刷しません。 、ここで

$name=''; 
… 
if($message["listingname"]==$name) echo ''; 
else echo $name=$message["listingname"]; 

、我々

  • ''新しい名前が一致した場合
  • に変数を初期化し、他の新しい名前をエコー''
  • をエコー:ここではロジックです。

echo $a=$bは、$ b int $ aをコピーして結果を出力します。

+0

しかし、スレッドIDは、各リストの名前の中に変更することができます。言い換えれば、各リストには、多くのスレッドを持つことができ、各スレッドは、多くのメッセージを持つことができます – sjackson

関連する問題