phpbar.de logo

Mailinglisten-Archive

Select-Problem

Select-Problem

Wim Bonis mysql_(at)_lists.phpcenter.de
Fri, 10 Aug 2001 11:19:54 +0200


> Moin allerseits,
> 
> ich habe eine Tabelle, die folgendermaßen aufgebaut ist.
> 
> id | parent | name
> ---|--------|------
> 1  |      0 | Name01
> 2  |      0 | Name02
> 3  |      0 | Name03
> 4  |      1 | Name04
> 5  |      1 | Name05
> 6  |      4 | Name06
> 
> etc...


Da ich das gerade in PHP programiert habe:
(id=inode,parent=parent,name=ktitel)

==================================================================
$mynode=$node;
$depth=0;
while($mynode>=1 and $depth<=30){
	$sql="SELECT parent,ktitel FROM inodes WHERE inode='$mynode'";
	$result = mysql_query($sql,$faq_dbh) or die ("Invalid
query".mysql_error());
    	while ($row = mysql_fetch_array($result)) {
		$path[]=$mynode;
		$path_titel[$mynode]=$row[ktitel];
		// echo "Found: $row[titel] $row[parent]<BR>\n";
		$mynode=$row[parent];
	}
	$depth++;
}

$path=array_reverse($path);

echo "<BR>";
echo "<a href=\"$SCRIPT_NAME\">/</a>&nbsp;";
for ($i=1; $i<count($path); $i += 1) {
	$newnode=$path[$i];
	echo "<a href=\"$SCRIPT_NAME?node=$newnode\">";
	echo $path_titel[$newnode];
	echo "/</a>&nbsp;";
}
==================================================================

Mit einem Select geht es bestimmt nicht da du nicht weist wie tief du im
Baum bist. Wenn du wüsstest das du genau 3 ebenen tief bist würde
folgender select gehen:

SELECT 
 i3.ktitel,i2.ktitel,i1.ktitel 
FROM 
 inodes AS i1,inodes AS i2,inodes AS i3 
WHERE 
 i1.inode=11 
 AND i1.parent=i2.inode 
 AND i2.parent=i3.inode; 

Wenn du maximal 10 ebenen tief sein kannst geht auch folgender SELECT:

SELECT
 
i10.ktitel,i9.ktitel,i8.ktitel,i7.ktitel,i6.ktitel,i5.ktitel,i4.ktitel,i
3.ktitel,i2.ktitel,i1.ktitel 
FROM inodes AS i1 
 LEFT JOIN inodes as i2 ON (i1.parent = i2.inode) 
 LEFT JOIN inodes as i3 ON (i2.parent = i3.inode) 
 LEFT JOIN inodes as i4 ON (i3.parent = i4.inode) 
 LEFT JOIN inodes as i5 ON (i4.parent = i5.inode) 
 LEFT JOIN inodes as i6 ON (i5.parent = i6.inode) 
 LEFT JOIN inodes as i7 ON (i6.parent = i7.inode) 
 LEFT JOIN inodes as i8 ON (i7.parent = i8.inode) 
 LEFT JOIN inodes as i9 ON (i8.parent = i9.inode) 
 LEFT JOIN inodes as i10 ON (i9.parent = i10.inode) 
WHERE i1.inode=11;

Dann must du aber immer noch in einer Schleife die "NULL" spalten
wegwerfen/ignorieren.


-------------------------------------------------------------------
Wim Bonis             ,+'^'+,                 Telefon:0631-31662-0
          Internet Solution Service GmbH      Technik:0631-31662-15
                       +,.,+                   privat:0631-36071-80
email: bonis_(at)_solution-service.de               67655 Kaiserslautern
Karl-Marx-Str. 13                           --== VIA-NETWoRKS KL ==-- 

---
!!NEU!!
Fragen und Antworten zu MySQL und dieser Liste unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive