php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.08.2011, 14:01  
Neuer Benutzer
 
Registriert seit: 25.08.2011
Beiträge: 3
PHP-Kenntnisse:
Anfänger
martin.b07 befindet sich auf einem aufstrebenden Ast
Standard SQL Abfrage pro Id in eine Zeile zusammenführen

Hallo
Ich schlage mich nun schon seit Stunden mit diesem Problem herum. Google hat einige Ansätze gefunden, aber bei mir hat nichts gefruchtet. Ich hoffe Ihr könnt mir helfen.
Zu meiner Situation:
Ich verwende in Wordpress ein Plugin, dass Eventdaten, u.a. den Ort in Lat/Lng, in sog. MetaDaten speichert. Das Problem an den Metadaten ist, dass diese für jede Seite in Schlüssel und Wert aufgeteilt sind. Ich bekomme nun mit einer SQL Abfrage viele Zeilen mit den ganzen Daten. Selbst wenn ich nur auf die benötigen beiden Schlüssel einschränke, weiß ich nicht, wie ich diese der ID zuordnen kann.
Denn es geht noch weiter. Ich möchte diese Daten in ein XML-File schreiben, damit ich die Koordinaten in einer GoogleMaps Tabelle darstellen kann.

Hier mal ein Codeausschnitt:
PHP-Code:
$query "SELECT  post_id, meta_key, meta_value FROM " $wpdb->prefix "postmeta WHERE meta_key = '_EventLat' OR meta_key = '_EventLng' ORDER BY post_id";
$result mysql_query($query);
if (!
$result) {
  die(
'Invalid query: ' mysql_error());
}

header("Content-type: text/xml");
while (
$row = @mysql_fetch_assoc($result)) {
  
// ADD TO XML DOCUMENT NODE
    
$node $dom->createElement("marker");  
    
$newnode $parnode->appendChild($node);
    
$newnode->setAttribute("id"$row['post_id']);
     
// if ($row['meta_key'] === '_EventLat')
        
$newnode->setAttribute("key"$row['meta_key']);
     
// if ($row['meta_key'] === '_EventLng')
        
$newnode->setAttribute("value"$row['meta_value']);
  } 
---> XML-File Ausschnitt:
PHP-Code:
<marker id="100" key="_EventLng" value="11.077069599999959"/>
<
marker id="100" key="_EventLat" value="49.455169"/> 
Ich brächte aber folgende Zeile im XML-File:
PHP-Code:
<marker id="100" lat="11.077069599999959" lng="49.455169"/> 
Pro ID sollte nur eine Zeile im XML-File dargestellt werden.

Irgendwie sehe ich grad keinen Ausweg. Ich hoffe ihr könnt mir dabei helfen.

Vielen Dank.
martin.b07 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.08.2011, 18:42  
Neuer Benutzer
 
Registriert seit: 17.08.2011
Beiträge: 9
PHP-Kenntnisse:
Fortgeschritten
smon befindet sich auf einem aufstrebenden Ast
Standard

Hallo martin.b07,

spontan fallen mir drei Ansätze zum Lösen deines Problems ein:
1. Du erstellst in der schon vorhandenen while-Schleife anstatt der XML-Knoten zunächst eine temporäre PHP-Struktur, welche du in einer zweiten Schleife in XML-Knoten umwandelst. Eine solche temporäre Struktur könnte etwa so aussehen:
PHP-Code:
$marker[$id] = array("_EventLng" => ..., "_EventLat" => ...) 
Und in deiner while-Schleife etwa so erzeugt werden:
PHP-Code:
$marker[$row['post_id']][$row['meta_key']] = $row['meta_value'
2. Du überprüfst vor Erzeugung eines Knotens, ob schon ein Knoten mit der aktuellen ID existiert, und modifizierst diesen gegebenenfalls. Stichworte dazu: DOMDocument::getElementById und DOMElement::setIdAttribute.

3. Du erzeugst mithilfe eines Self-Joins direkt in der SQL-Anweisung die benötigte Struktur.

Viele Grüße
smon
smon ist offline   Mit Zitat antworten
Alt 25.08.2011, 19:06  
Neuer Benutzer
 
Registriert seit: 25.08.2011
Beiträge: 3
PHP-Kenntnisse:
Anfänger
martin.b07 befindet sich auf einem aufstrebenden Ast
Standard

Hi smon

Danke für deine Ideen.
Was wäre den deiner Meinung die beste und sagen wir pefomantere?

Ich werde einfach mal die einzelnen Möglichkeiten probieren.

cheers
martin
martin.b07 ist offline   Mit Zitat antworten
Alt 25.08.2011, 22:30  
Neuer Benutzer
 
Registriert seit: 25.08.2011
Beiträge: 3
PHP-Kenntnisse:
Anfänger
martin.b07 befindet sich auf einem aufstrebenden Ast
Standard

Irgendwie war heute nicht mein Tag. Habe mich mit deinen Ideen leider immer tiefer in Wald getrieben.
Aber ich habe mir jetzt ne eigene Lösung gebastelt.
Auf einer Google Maps API Seite zum Thema habe ich eine PHP-Echo Anleitung gefunden.
Dann habe ich noch ein paar If-Abfragen reingebastelt und schon geht es.

PHP-Code:
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
    
  if(
$check != $row['post_id']) {
    if(
$check)
      echo 
'</marker>';
      
    
// ADD TO XML DOCUMENT NODE
    
echo '<marker ';
    echo 
'id="' parseToXML($row['post_id']) . '">';
    echo 
'<' parseToXML($row['meta_key']) . '>';
    echo 
parseToXML($row['meta_value']);
    echo 
'</' parseToXML($row['meta_key']) . '>';
  }
  else {
    echo 
'<' parseToXML($row['meta_key']) . '>';
    echo 
parseToXML($row['meta_value']);
    echo 
'</' parseToXML($row['meta_key']) . '>';
  }

  
$check $row['post_id'];
  
}
echo 
'</marker>'
Ausgabe
PHP-Code:
<marker id="95"><EventAllDay>yes</EventAllDay><EventShowMapLink>false</EventShowMapLink><EventStartDate>2011-08-26 00:00:00</EventStartDate><EventEndDate>2011-08-28 23:59:00</EventEndDate><EventVenue>Speicherteich Gerstreit Saalbach Hinterglemm</EventVenue><EventCountry>Austria</EventCountry><EventAddress>Speicherteich9805Austria</EventAddress><EventCity>Hinterglemm</EventCity><EventState/><EventProvince/><EventZip>5754 </EventZip><EventShowMap>true</EventShowMap><EventLat>13.454783200000065</EventLat><EventLng>46.7710544</EventLng></marker
Trotzdem danke. Mit deinem zweiten Tipp bin ich meine Finalle Lösung gekommen.

cheers
Martin
martin.b07 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ist SQL Abfrage leer? zarabina Datenbanken 2 25.08.2011 11:27
SQL Abfrage optimieren tromton Datenbanken 11 01.08.2011 20:42
[Erledigt] Verdraxte Abfrage von 2 SQL Tabellen EmmKey PHP Einsteiger 7 15.03.2011 12:21
[Erledigt] SQL zweistufige Abfrage Elefterios Datenbanken 12 13.03.2011 15:23
SQL Abfrage INNER JOIN etc. chr1s-eg Datenbanken 4 01.03.2011 13:37
SQL Abfrage - Summieren mehrerer Werte eines Datensatzes themk# Datenbanken 7 15.02.2011 16:42
[Erledigt] Mehr als eine SQL Abfrage hintereinander. Seebär PHP Einsteiger 5 29.12.2010 15:44
erweitere sql abfrage Helix PHP Einsteiger 5 27.12.2010 04:11
Abfrage gibt nur eine Zeile zurück ArcticMonkey PHP Einsteiger 6 13.12.2010 07:12
False Abfrage und SQL hängt sich auf marc77 Datenbanken 4 22.11.2010 14:57
Wie geht diese SQL Abfrage? marc77 Datenbanken 5 13.11.2010 12:50
[Erledigt] sql abfrage mit Tabelle in der $ Zeichn vorkommt dior Datenbanken 5 09.11.2010 13:05
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql id zusammenfassen, @mysql_fetch_assoc zeile zurück, sql je abfrage eine zeile, php abfrage in welcher zeile id, sql abfrage der zeilen, sql erste zeile zu jeder id, sql zeilen zusammenfassen, sql ergebnisse nach schlüssel zusammenfassen, php pro abfrage eine zeile, row in sql zusammenfügen, sql zeilen mit gleichen ids in eine zusammenfassen, sql eine zeile pro id, sql abfragen zeilen zusammenfassen, sql abfragen in reihe php, parsetoxml, ergebnis einer abfrage in einer zeile zusammen führen sql, ergebnis einer abfrage in einer zeile zusammen führen, sql datensätze einer id zusammenführen, php sql ergebnis id einfach, sql abfrage innerhalb einer schleife

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum