2011-08-13 14 views
0

私は誰かが私を助けてくれるかどうか疑問に思います。ウィンドウに 'Total Of'を表示

以下のコードを使用して、mySQLデータベースに格納されているすべての場所のマーカーを正しく表示しています。

PHP

<?php 
require("phpfile.php"); 

// Start XML file, create parent node 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server 

$connection=mysql_connect ("hostname", $username, $password); 
if (!$connection) { die('Not connected : ' . mysql_error());} 

// Set the active MySQL database 

$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
die ('Can\'t use db : ' . mysql_error()); 
} 

// Select all the rows in the markers table 

改正コード

$query = "select l.locationname, l.address, l.osgb36lat, l.osgb36lon, count(*) as totalfinds from locations as l left join finds as f on l.locationid=f.locationid"; 
     $result = mysql_query($query); 
     if (!$result) { 
     die('Invalid query: ' . mysql_error()); 
     } 

    header("Content-type: text/xml"); 

    // Iterate through the rows, adding XML nodes for each 

    while ($row = @mysql_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("locationname",$row['locationname']); 
    $newnode->setAttribute("address",$row['address']); 
    $newnode->setAttribute("osgb36lat",$row['osgb36lat']); 
    $newnode->setAttribute("osgb36lon",$row['osgb36lon']); 
    $newnode->setAttribute("finds",$row['finds']); 
    $newnode->setAttribute("totalfinds",$row['totalfinds']); 
    } 
     } 

     echo $dom->saveXML(); 

     ?> 

私がやりたい何

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Locations</title> 
     <link rel="stylesheet" href="css/alllocationsstyle.css" type="text/css" media="all" /> 
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script> 
     <script type="text/javascript"> 
      var customIcons = { 
      0: { 
      icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png', 
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      }, 
      1: { 
      icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png', 
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      } 
      }; 

      function load() { 
      var map = new google.maps.Map(document.getElementById("map"), { 
      center: new google.maps.LatLng(54.312195845815246,-4.45948481875007), 
      zoom:6, 
      mapTypeId: 'roadmap' 
      }); 

      var infoWindow = new google.maps.InfoWindow; 

      // Change this depending on the name of your PHP file 
      downloadUrl("phpfile.php", function(data) { 
      var xml = data.responseXML; 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var locationname = markers[i].getAttribute("locationname"); 
      var address = markers[i].getAttribute("address"); 
      var finds = markers[i].getAttribute("finds"); 
      var totalfinds = markers[i].getAttribute("totalfinds"); 
      var point = new google.maps.LatLng( 
      parseFloat(markers[i].getAttribute("osgb36lat")), 
      parseFloat(markers[i].getAttribute("osgb36lon"))); 
      var html = "<b>" + locationname + "</b>"; 
      var icon = customIcons[finds] || {}; 
      var marker = new google.maps.Marker({   
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
      } 
      }); 
      } 
      function bindInfoWindow(marker, map, infoWindow, html) { 
      google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(map, marker); 
      }); 
      } 

      function downloadUrl(url, callback) { 
      var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

      request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
      } 
      }; 

      request.open('GET', url, true); 
      request.send(null); 
      } 

      function doNothing() {} 

      </script> 
      </head> 

      <body onLoad="load()"> 
       <div id="map"></div> 
      </body> 
      </html> 

がADAPにあるHTML各マーカーごとに作成されたInfowindow内の「Location Name」とともに、各ロケーションの「Findsの合計数」が表示されるコーディング。

「場所」の表と一致する行の数を数えなければならない「発見」という名前のテーブルからこの情報を取得する必要があることはわかっていますが、これを行う方法の手掛かりはありません。

私は、誰かが、これを達成するために必要なことについて、ある程度のガイダンスを提供できるかどうかを疑問に思いました。

多くの感謝と種類について

クリス

-- 
-- Table structure for table `finds` 
-- 
DROP TABLE IF EXISTS `finds`; 
CREATE TABLE IF NOT EXISTS `finds` (
    `userid` int(6) NOT NULL, 
    `locationid` int(6) NOT NULL, 
    `findid` int(6) NOT NULL auto_increment, 
    `findosgb36lat` float(10,6) NOT NULL, 
    `findosgb36lon` float(10,6) NOT NULL, 
    `dateoftrip` varchar(8) NOT NULL, 
    `findname` varchar(35) NOT NULL, 
    `finddescription` varchar(100) NOT NULL, 
    `findimage` varchar(200) default NULL, 
    `additionalcomments` varchar(600) default NULL, 
    `makepublic` varchar(3) NOT NULL default 'no', 
    PRIMARY KEY (`findid`) 
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ; 

場所は、あなたがしたいと思う

-- 
-- Table structure for table `locations` 
-- 

CREATE TABLE `locations` (
    `userid` int(6) NOT NULL, 
    `locationid` int(6) NOT NULL auto_increment, 
    `locationname` varchar(80) NOT NULL, 
    `address` varchar(110) NOT NULL, 
    `osgb36lat` float(10,6) NOT NULL, 
    `osgb36lon` float(10,6) NOT NULL, 
    `osgridref` varchar(20) NOT NULL, 
    `wgs84latd` int(2) NOT NULL, 
    `wgs84latm` int(2) NOT NULL, 
    `wgs84lats` decimal(6,2) NOT NULL, 
    `wgs84latb` varchar(1) NOT NULL, 
    `wgs84lond` int(2) NOT NULL, 
    `wgs84lonm` int(2) NOT NULL, 
    `wgs84lons` decimal(6,2) NOT NULL, 
    `wgs84lonb` varchar(1) NOT NULL, 
    `nameoflocationcontact` varchar(30) NOT NULL, 
    `locationcontactsaddressline1` varchar(50) NOT NULL, 
    `locationcontactsaddressline2` varchar(50) default NULL, 
    `locationcontactsaddressline3` varchar(50) default NULL, 
    `locationcontactsaddressline4` varchar(50) default NULL, 
    `locationcontactstelephonenumber` varchar(15) default NULL, 
    `finds` int(1) NOT NULL, 
    PRIMARY KEY (`locationid`) 
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ; 

答えて

0

をダンプするSQL - SQLダンプを検索SQLのフェッチコードを変更してfindsテーブルに追加します。左結合はこれに適しているようです。

更新されたSQLコード:

選択l.locationid、f.locationid、l.locationname、l.address、 l.osgb36lat、l.osgb36lon、l.finds、カウント数(F。 locationid)Lなどの場所から あなたは今場所の総数がtotal_findsに見つけ得ることができるようになりますl.locationid

によって 基f.locationid = l.locationidにFとして発見に参加左totalfindsとして$ row配列の要素。また、私はを削除したことに注意してください。元のSQLでは1の条件は意味をなさないので注意してください。

もちろん、XMLにtotal_finds値を保存して、JSコードに適切な変更を加える必要があります。

+0

こんにちは、私の投稿に返信する時間を取ってくれてありがとう。私はあなたが提案した変更を加えましたが、残念ながらそれを動作させることはできません。マップには、テーブルの最初のレコードのマーカーのみが表示されるようになりました。エラーは表示されず、マップは期待通りに開きます。私が間違っているかもしれない場所を教えてください。私は新しいコードを表示して私の元のpossへの更新をしました。多くのありがとうと思います。 Chris – IRHM

+0

こんにちは、これを再現しようとしましたが、テスト入力を使用して少なくとも2つのマーカーを設定しました。私はあなたの最後にどこから行くべきかわからない、あなたはデータベースから来るすべてのデータが正しいと確信していますか?これをより正確に再現したい場合は、DBダンプが役立ちます。 – kjetilh

+0

こんにちは、まずこれに私と一緒にお立ち寄りいただきありがとうございます。私はテーブルに戻ってきて、すべては私にとっては大丈夫だと思うが、私はかなり新しいので、私は間違っている可能性がある。私は元の投稿にSQLダンプを添付しました。多くのありがとうと親切に感謝します。 Chris – IRHM

関連する問題