1

イベントを表示するためにグーグルマップマーカーを作成しようとしていますが、イベントが同じ場所で発生することがあるという問題があります。そのため、マーカーが重複しています。

同じ行がもっとあれば、結果を1つにまとめることができるかと思いましたvenues.VENUE_LOCATION

したがって、次のようなxmlを生成する代わりに:

<marker lat="48.153938" lng="17.108459" venue="2" html="Event 1 - Jan 1" />
<marker lat="48.153938" lng="17.108459" venue="2" html="Event 2 - Jan 10" />
<marker lat="48.153938" lng="17.108459" venue="2" html="Event 3 - Jan 18" />
<marker lat="49.459843" lng="17.564821" venue="5" html="Event 55 - Jan 4" />
<marker lat="49.459843" lng="17.564821" venue="5" html="Event 70 - Jan 10" />

その場所にあるすべてのマーカーの情報を含む1つのマーカーがあります。

<marker lat="48.153938" lng="17.108459" venue="2" html="Event 1 - Jan 1<BR>Event 2 - Jan 10<BR>Event 3 - Jan 18" />
<marker lat="49.459843" lng="17.564821" venue="5" html="Event 55 - Jan 4<BR>Event 70 - Jan 10" />

どうすればそれができるのでしょうか?これが私の現在のphpコードです

    $query = "SELECT
    events.ID,
    events.EVENT_NAME,
    events.start_datetime,
    events.end_datetime,
    events.VENUE_LOCATION,
    venues.VENUE_NAME,
    venues.VENUE_LOCATION,
    venues.LAT,
    venues.LNG,
    GROUP_CONCAT(music_styles.MUSIC_STYLE_NAME) AS MUSIC_STYLE_NAME
    FROM events
    INNER JOIN venues 
    ON events.VENUE_LOCATION = venues.ID
    INNER JOIN events_music_styles
    ON events.ID = events_music_styles.event_id
    INNER JOIN music_styles
    ON events_music_styles.music_style_id = music_styles.id
    WHERE start_datetime >= '$phpFromDate'
    AND start_datetime <= '$phpToDate' 
";


$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}



header("Content-type: text/xml");
echo '<markers>';

if(mysql_num_rows($result) > 0)
{
while ($row = @mysql_fetch_assoc($result))
{
  echo '<marker ';
  echo 'event_id="' . parseToXML($row['ID']) . '" ';
  echo 'lat="' . parseToXML($row['LAT']) . '" ';
  echo 'lng="' . parseToXML($row['LNG']) . '" ';
  echo 'venue="' . parseToXML($row['VENUE_LOCATION']) . '" ';
  echo '/>';
}
}
echo '</markers>';

ありがとう!

4

1 に答える 1

3

次のように SQL クエリを変更してみてくださいGROUP_CONCAT

GROUP_CONCAT(music_styles.MUSIC_STYLE_NAME SEPARATOR '<br>') AS MUSIC_STYLE_NAME

GROUP BYクエリの最後に次のステートメントも追加します。

GROUP BY venues.LAT, venues.LNG

次に、マーカー タグを出力するときに、html属性を追加します。

echo 'html="' . parseToXML($row['MUSIC_STYLE_NAME']) . '" ';

希望のコード:

$query = "SELECT
    events.ID,
    events.EVENT_NAME,
    events.start_datetime,
    events.end_datetime,
    events.VENUE_LOCATION,
    venues.VENUE_NAME,
    venues.VENUE_LOCATION,
    venues.LAT,
    venues.LNG,
    GROUP_CONCAT(music_styles.MUSIC_STYLE_NAME SEPARATOR '<br/>') AS MUSIC_STYLE_NAME
    FROM events
    INNER JOIN venues 
    ON events.VENUE_LOCATION = venues.ID
    INNER JOIN events_music_styles
    ON events.ID = events_music_styles.event_id
    INNER JOIN music_styles
    ON events_music_styles.music_style_id = music_styles.id
    WHERE start_datetime >= '$phpFromDate'
    AND start_datetime <= '$phpToDate'
    GROUP BY venues.LAT, venues.LNG
";


$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}



header("Content-type: text/xml");
echo '<markers>';

if(mysql_num_rows($result) > 0)
{
    while ($row = @mysql_fetch_assoc($result))
    {
      echo '<marker ';
      echo 'event_id="' . parseToXML($row['ID']) . '" ';
      echo 'lat="' . parseToXML($row['LAT']) . '" ';
      echo 'lng="' . parseToXML($row['LNG']) . '" ';
      echo 'venue="' . parseToXML($row['VENUE_LOCATION']) . '" ';
      echo 'html="' . parseToXML($row['MUSIC_STYLE_NAME']) . '" ';
      echo '/>';
    }
}
echo '</markers>';
于 2013-01-09T11:06:23.697 に答える