[MySQL] Doppelte Ausgabe eines Datensatzes
Ich habe ein seltsames verhalten bei einer Abfrage.
Ich habe eine Datenbank mit etwa 300 Einträgen.
Wenn ich über die ID "gebID" zu den einzelnen Bereichen eine Abfrage mache kommt bei allen immer das richtige heraus. Bis auf diesen einen Datensatz in einem Bereich. Dabei finde ich keinen Fehler. Kann da mal einer drüber sehen.
Im Moment Löse ich das Problem mit einem Puffer Array $reg
Code:
CREATE TABLE `Boulder_Daten` (
`ID` smallint(4) unsigned NOT NULL auto_increment,
`bildID` tinyint(2) unsigned NOT NULL default '0',
`uiaa` set('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23') NOT NULL default '0',
`franz` set('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23') NOT NULL default '0',
`fb_bloc` set('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23') NOT NULL default '0',
`fb_trav` set('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23') NOT NULL default '0',
`Farben` set('0','1','2','3','4') NOT NULL default '0',
`Grad` set('0','1','2','3','4') NOT NULL default '0',
`Type` set('0','1','2','3','4','5') NOT NULL default '0',
`gebID` tinyint(3) NOT NULL default '0',
`Name` varchar(100) NOT NULL default '',
`desc` mediumtext NOT NULL,
`Zustieg` mediumtext NOT NULL,
`datum` timestamp NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `Boulder_Daten` VALUES (119, 0, '0', '0', '2', '0', '0', '0', '4', 21, 'Wurzelbürste', 'Gerade hoch über Leisten zum horizontalen Band. Abstieg nach links über gestufte Rinne.Mit Sitzsstart von links etwas schwieriger.', 'An der kleinen Mauer rechterhand am Weg zum Schiffsbug ("Reeling") ganz links.', '2005-11-30 10:16:39');
PHP-Code:
<?php
/**
* @short Komplette Ausgabe eines Gebietes
* @param [Object] \b $x DomDocument
* @param [Object] \b $e DomElement
* @param [Integer] \b $i gebID
* @code
<bouldersektoren>
<!-- Bild = SortID -->
<boulderitem id="" bild="">
<id />
<bildid />
<Grad />
<Type />
<Name />
<Beschreibung />
<Zustieg />
<timestamp />
<UIAA />
<Franz />
<Bloc />
<Trav />
</boulderitem>
</bouldersektoren>
* @endcode
* @return \e Array \b [Void] \e DomNode
*/
function BoulderSektorenDaten( DomDocument $x, DomElement $e, $i )
{
$PRF = SQLPREFIX;
$q = mysql_query( "SELECT SQL_BIG_RESULT DISTINCTROW
a.Name COLLATE utf8_general_ci AS `Name`
, a.ID AS `id`, a.bildID AS `bildid`
, MAKE_SET( a.Farben, 'Gelb', 'Blau', 'Rot', 'Weiss' ) AS `select-farbe`
, a.desc COLLATE utf8_general_ci AS `Beschreibung`
, a.Zustieg COLLATE utf8_general_ci AS `Zustieg`
, a.Grad AS `Definition`, a.Type AS `Type`
, UNIX_TIMESTAMP( a.datum ) AS `timestamp`
, b.uiaa AS `UIAA`, c.franz AS `Franz`
, d.fb_bloc AS `Bloc`, e.fb_trav AS `Trav`
, f.name COLLATE utf8_general_ci AS `gebiet`, g.ID AS `fit`
FROM `${PRF}Boulder_Daten` AS a
LEFT JOIN `${PRF}Boulder_Bewertung` AS b ON FIND_IN_SET( a.uiaa, b.ID )
LEFT JOIN `${PRF}Boulder_Bewertung` AS c ON FIND_IN_SET( a.franz, c.ID )
LEFT JOIN `${PRF}Boulder_Bewertung` AS d ON FIND_IN_SET( a.fb_bloc, d.ID )
LEFT JOIN `${PRF}Boulder_Bewertung` AS e ON FIND_IN_SET( a.fb_trav, e.ID )
LEFT JOIN `${PRF}Boulder_Gebiete` AS f ON f.ID='" . (int)$i . "'
LEFT JOIN `${PRF}Boulder_Kommentare` AS g ON g.boulID=a.ID
WHERE ( a.gebID LIKE '" . (int)$i . "' )
ORDER BY a.ID,a.bildID ASC LIMIT 0,300 LOCK IN SHARE MODE;
", $GLOBALS['CON']
);
if ( defined( 'HJCMS_DEBUGGER' ) && HJCMS_DEBUGGER == 1 && isset( $_SESSION['SQL_QUERY_COUNT'] ) )
(int)$_SESSION['SQL_QUERY_COUNT']++;
$HideDomNode = array( 'bildid', 'gebiet', 'fit' );
if ( $q ) {
$bs = $x->createElement( 'bouldersektoren' );
$e->appendChild( $bs );
$reg = array(); // Doppelte Ausgabe Verhindern!
while( $r = mysql_fetch_assoc( $q ) ) {
if ( ! in_array( (int)$r['id'], $reg ) ) {
array_push( $reg, (int)$r['id'] );
$s = $x->createElement( 'boulderitem' );
$s->setAttribute( 'gebID', (int)$i );
$s->setAttribute( 'id', $r['id'] );
$s->setAttribute( 'bild', $r['bildid'] );
$s->setAttribute( 'gebiet', StripToUtf8( $r['gebiet'] ) );
foreach ( $r AS $k => $v )
{
if ( ! empty( $v ) && $k != 'id' && ! in_array( $k, $HideDomNode ) ) {
$ele = $x->createElement( $k, StripToUtf8( $v ) );
$s->appendChild( $ele );
}
}
// Ajax Dataset vorbereiten
if ( ! empty( $r['fit'] ) && defined( 'HJCMS' ) ) {
$ele = $x->createElement( 'comSet' );
$ele->setAttribute( 'rouID', (int)$r['id'] );
$ele->setAttribute( 'start', $r['fit'] );
$ele->setAttribute( 'limit', 999 );
$json = array( (int)$r['id'], (int)$r['fit'], 999, HJCMS );
$ele->setAttribute( 'json', json_encode( $json ) );
$s->appendChild( $ele );
unset( $json );
}
$bs->appendChild( $s );
}
}
mysql_free_result( $q );
}
unset( $reg );
// XMLDebug( $x );
if ( isset( $x ) && is_object( $x ) ) {
$xsl = new TemplateParser;
return $xsl->GetInnerHtmlExternXMLDomObject( 'Ausgabe_Boulder_Sektor', $x );
}
return true;
}
?>