phpbar.de logo

Mailinglisten-Archive

[php] substring_index

[php] substring_index

Sebastian Tobias Mendel genannt Mendelsohn lists at sebastianmendel.de
Mon Okt 27 10:44:43 CET 2003


> $res1 = mysql_query("select distinct seitenbezug from nav where hauptseite =
> 0 order by seitenbezug");
> while($data = mysql_fetch_array($res1))
>  {
>  // Nummer der Hauptseite aus Spalte Seitenbezug
>  $haupt = substr($data['seitenbezug'],0,strpos($data['seitenbezug'],'.'));
> echo 'haupt: '.$haupt.'<br>';
> $res2 = mysql_query("select * from nav where
> substring_index(dateiname,'_',1) = '$haupt' ");
>  while($unter = mysql_fetch_array($res2))
>   {
>   $unternav = substr($unter['dateiname'],0,strpos($unter['dateiname'],'.'));
>   echo 'unter: '.$unternav.'<br>';
>   }
> }

wenn du noch etwas suchst findest du bestimmt auch eine noch langsamere 
Lösung ...

du solltest die Daten mit einem Query holen, wie Denis schon schrieb, 
allerdings mit einem LEFT JOIN anstelle eines INNER JOIN,

und Formatierung der Ausgabe ist dann wieder Aufgabe von php!

z.b. so:

    SELECT SUBSTRING_INDEX(`hauptseite`.`dateiname`, '.', 1)
        AS `hauptseite`,
           `unterseite`.`dateiname` AS `unterseite`
      FROM `seitenbezug` AS `hauptseite`
LEFT JOIN `seitenbezug` AS `unterseite`
        ON `hauptseite`.`dateiname` = `unterseite`.`seitenbezug`

...
$lasthauptseite = '';
while ( $row ... )
{
   if ( $lasthauptseite !== $row['hauptseite'] )
   {
     $lasthauptseite = $row['hauptseite'];
     echo 'haupt: ' . $row['hauptseite'] . "\n";
   }
   if ( ! empty($row['unterseite']) )
   {
     echo 'unter: ' . $row['unterseite'] . "\n";
   }
}
...


oder so in der Art... habs jetzt nicht kontrolliert


-- 
Sebastian Mendel

*www.warzonez.de*
www.sebastianmendel.de | www.tekkno4u.de | www.nofetish.com


php::bar PHP Wiki   -   Listenarchive