Archiv verlassen und diese Seite im Standarddesign anzeigen : Kategorien auslesen ?!
kopfkult 30-12-2001, 16:24 Moin alle zusammen !!
Hab da mal wieder ein PROBLEM das ich gerne mit euch teilen wollte ! *g*
Und zwar möchte ich ein Kategorie basiertes Linksystem aufbauen und hab eine Tabelle mit folgendem aufbau für die Kategorien:
ID, PID, SID, KatName
Die zuordnung erfolgt wie folgt
TopKat:
ID=PID, SID=0
ChildKat:
ID, PID=(ID der TopKat), SID=(ID der übergeordneten Kat)
Nun kann ich über folgende Function,
function kat_out($kat_id) {
$query = "Select * From TBL Where id=$kat_id";
$result = mysql_query($query) or
die("Query failed");
$row = mysql_fetch_array($result);
echo $row["KatName"], "\n";
kat_out($row["SID"]);
}
zwar die Kategorien auslesen, aber leider nicht in der richtigen reihenfolge !!
Ich muss zuerst die ID des am ende stehenden eintrages, angeben ($kat_id), und bekomme dann die Kategorien zurück wobei die TopKat am ende steht !!!
ich brauche aber folgende ausgabe z.B. so:
TopKat>>ChildKat1>>ChildKat2>>ChildKat3>>usw.
und zwar mit Link.
Darunter dann die anderen Kategorien oder Links(in einer anderen Tabelle, zuordnung durch die ID der KAT)
So ich hoff das war verständlich, und hoffe auf Hilfe !!!
thx kopfkult
leider kann ich dir mal nicht folgen, wirst auf Sky warten müssen, oder mal ein Beispiel angeben mit einer Tabelle wo schon werte drin stehen.
Hab's leider auch nicht verstanden... :rolleyes:
kopfkult 30-12-2001, 17:25 Hier also ein kleines Beispiel:
ID PID SID KatName
-----------------------------
1 1 0 TopKat
2 1 1 ChildKatA
3 1 1 ChildKatB
4 1 2 ChildA1
5 1 4 ChildAA
Wenn ich nun die obige Function mit der $Kat_id=5 aufrufe,
bekomme ich die ergebnisse in folgender reihenfolge:
ChildAA
ChildA1
ChildKatA
TopKat
Ich brauche dass ganze aber in umgekehrter reihenfolge, also ich gebe die topkat an und erhalte die ausgabe in etwa dieser form:
TopKat
>ChildKatA
>>ChildA1
>>>ChildAA
>ChildKatB
so ich hoffe das hilft jetzt weiter !? :)
cu
So sollt's gehen:
funtion kat_out($id)
{
$sid = 1;
while ($sid) {
$r = mysql_query("SELECT sid,katname FROM tabelle WHERE id='$id'");
if ($d = mysql_fetch_array($r)) {
$sid = $d[sid];
$id = $eintraege[$i] = $d[katname];
}
array_reverse($eintraege);
for ($i=0;$i<sizeof($eintraege);$i++) {
echo (($i==0) ? "$eintraege[$i] '" : (str_repeat('>',$i))." $eintraege[$i]");
}
}
kopfkult 30-12-2001, 20:02 So Danke erstmal für eure mühe, aber ich hab einer andere lösung gefunden !!
Hab aber jetzt ein anderes problem.
Wie bekomme ich den nächsten auto_increment wert heraus,
also die id die beim nächsten insert vergeben wird !!?? ;)
thx kopfkult
Lass uns doch an deiner Lösung bitte auch teilhaben.
Zu deiner Frage: mysql_last_insert_id() bzw. LAST_INSERT_ID() in SQL.
kopfkult 30-12-2001, 22:50 Die Function zu der ersten Sache werde ich hier posten wenn sie fertig ist !! wird wohl bald sein
Aber zu der 2ten Frage habe ich noch eine bessere Antwort gefunden, und zwar.
$query = "SHOW TABLE STATUS LIKE 'tbname'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$auto_increment = $row[Auto_increment];
Deine Antwort funktioniert bei mir leider nicht, da ich
diesen wert viel später auslesen muss
"mysql_last_insert_id() bzw. LAST_INSERT_ID()"
Funktionieren doch leider nur wenn dazwischen nicht auf die
tabelle zugegriffen wurde oder die connection getrennt
wird ! oder ??????
cu und thx kopfkult
vieleicht hilft das ja irgendjemand anders auch weiter !!
Stimmt schon, aber du kannst es ja direkt nach der Query in einer Variable speichern.
kopfkult 05-01-2002, 16:01 So hier die komplette function zum darstellen der Kategorien !!
function link_out_all($tb_links, $tb_kat, $kat_id, $id) {
if (empty($kat_id)){
echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
\n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
\n<tr><td valign='top'>");
echo ("\n<center><table width='100%' border='0' cellspacing='0' cellpadding='10'>");
$limit1 = 0;
//Datensätze pro zeile
$limit2 = 3;
//query zur ermittlung der Zeilenanzahl
$zeilen_query = "SELECT count(*) AS zeilen FROM $tb_kat WHERE sid='0'";
$zeilen_result = mysql_query($zeilen_query);
$zeilen = mysql_fetch_array($zeilen_result);
$anzahl = ceil(($zeilen[zeilen] / $limit2));
for ($zeilen = 1; $zeilen <= $anzahl; $zeilen++) {
//zeile 1 start
echo ("\n<tr>");
//sql query zur ausgabe der HKAT
$query01 = "SELECT $tb_kat.id AS id,
$tb_kat.pid AS pid,
$tb_kat.name AS name,
IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
WHERE sid='0' GROUP BY($tb_kat.name) ORDER BY name LIMIT $limit1, $limit2";
$result01 = mysql_query($query01) or die("Kann Haupkatquery nicht ausfuehren !");
while($topkat = mysql_fetch_array($result01))
{
$pid = $topkat[id];
//sql query zur ausgabe der UKAT
$query02 = "SELECT $tb_kat.id AS id,
$tb_kat.pid AS pid,
$tb_kat.name AS name,
IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
WHERE sid='$topkat[id]' and pid='$pid' GROUP BY($tb_kat.name) ORDER BY anzahl DESC LIMIT 0, 3";
$result02 = mysql_query($query02) or die("Kann Childkatquery nicht ausfuehren !");
//spalte 1 start
echo ("\n<td width='33%' height='50' align='left' valign='top'>");
echo ("<a class='download' href='$PHP_SELF?kat_id=$topkat[id]&id=$topkat[id]'>$topkat[name]</a>\n");
echo ("<br>");
echo ("<font>");
while($chkat = mysql_fetch_array($result02)) {
echo ("<a class='menu' href='$PHP_SELF?kat_id=$chkat[id]&id=$chkat[pid]'>$chkat[name]</a>($chkat[anzahl]), ");
}
//prüfen ob weitere Unterkat vohanden und setzen von punkten !!!
$tst_query = "SELECT count(*) AS test FROM $tb_kat WHERE sid='$pid'";
$tst_result = mysql_query($tst_query);
$tst = mysql_fetch_array($tst_result);
if ($tst[test] > 0) echo (" . . .</font>");
//ende spalte 1
echo ("\n</td>");
}
$limit1 = $limit1 + $limit2;
//ende zeile 1
echo ("\n</tr>");
}
echo ("\n</table></center>");
echo ("\n</td></tr></table>
\n</td></tr></table></center>");
} else {
$kat_id_save = $kat_id;
do {
$top_query = "SELECT $tb_kat.id AS id,
$tb_kat.sid AS sid,
$tb_kat.name AS name FROM $tb_kat
WHERE id='$kat_id' ";
$top_result = mysql_query ($top_query) or die ("Kann query nicht ausfuehren !");
while($verlauf = mysql_fetch_array($top_result)) {
$array[$verlauf[name]] = $verlauf[id];
$kat_id = $verlauf[sid];
}
} while ($kat_id > 0);
$r_array = array_reverse($array);
echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
\n<table width='100%' height='100%' border='0' cellspacing='2' cellpadding='0' bgcolor='#003388'>
\n<tr><td valign='top'>");
echo "\n<a class='download' href='link_out_all.php'>Home</a>"."<font> >> </font>";
while (list ($name, $p_id) = each ($r_array)) {
if ($p_id != $kat_id_save) {
echo "\n<a class='download' href='$PHP_SELF?kat_id=$p_id&id=$id'>$name</a>";
}
if ($p_id == $kat_id_save) {
echo "\n<b><font>$name</font></b>";
}
if ($p_id != $kat_id_save) echo "\n<font>".">>"."</font>";
}
echo ("\n</td></tr></table>
\n</td></tr></table></center><br>");
// Anfang Kat auswahl
$limit1 = 0;
//Datensätze pro zeile
$limit2 = 3;
//query zur ermittlung der Zeilenanzahl
$zeilen_query = "SELECT count(*) AS zeilen FROM $tb_kat WHERE sid='$kat_id_save' and pid='$id'";
$zeilen_result = mysql_query($zeilen_query);
$zeilen = mysql_fetch_array($zeilen_result);
$anzahl = ceil(($zeilen[zeilen] / $limit2));
if ($zeilen[zeilen] > 0) {
echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
\n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
\n<tr><td valign='top'>");
//variablen für die ausgabe
echo ("\n<center><table width='100%' border='0' cellspacing='0' cellpadding='10'>");
for ($zeilen = 1; $zeilen <= $anzahl; $zeilen++) {
//zeile 1 start
echo ("\n<tr>");
//sql query zur ausgabe der HKAT
$query01 = "SELECT $tb_kat.id AS id,
$tb_kat.pid AS pid,
$tb_kat.name AS name,
IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
WHERE pid='$id' and sid='$kat_id_save' GROUP BY($tb_kat.name) ORDER BY name LIMIT $limit1, $limit2";
$result01 = mysql_query($query01) or die("Kann Haupkatquery nicht ausfuehren !");
while($topkat = mysql_fetch_array($result01))
{
$pid = $topkat[id];
//sql query zur ausgabe der UKAT
$query02 = "SELECT $tb_kat.id AS id,
$tb_kat.pid AS pid,
$tb_kat.name AS name,
IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
WHERE sid='$pid' and pid='$id' GROUP BY($tb_kat.name) ORDER BY anzahl DESC LIMIT 0, 3";
$result02 = mysql_query($query02) or die("Kann Childkatquery nicht ausfuehren !");
//spalte 1 start
echo ("\n<td width='33%' height='50' align='left' valign='top'>");
echo ("<a class='download' href='$PHP_SELF?kat_id=$topkat[id]&id=$id'>$topkat[name]</a><font> ($topkat[anzahl])</font>");
echo ("<br>");
echo ("<font>");
while($chkat = mysql_fetch_array($result02)) {
echo ("<a class='menu' href='$PHP_SELF?kat_id=$chkat[id]&id=$id'>$chkat[name]</a>($chkat[anzahl]), ");
}
//prüfen ob weitere Unterkat vohanden und setzen von punkten !!!
$tst_query = "SELECT count(*) AS test FROM $tb_kat WHERE sid='$pid'";
$tst_result = mysql_query($tst_query);
$tst = mysql_fetch_array($tst_result);
if ($tst[test] > 0) echo (" . . .</font>");
//ende spalte 1
echo ("\n</td>");
}
$limit1 = $limit1 + $limit2;
//ende zeile 1
echo ("\n</tr>");
}
echo ("\n</table></center>");
echo ("\n</td></tr></table>
\n</td></tr></table></center>");
}
//query zur link anzahl
$zeilen_query = "SELECT count(*) AS count FROM $tb_links WHERE kat='$kat_id_save'";
$zeilen_result = mysql_query($zeilen_query);
$zeilen = mysql_fetch_array($zeilen_result);
//Kommentar und Links anzeigen (nur wenn links in der Kat)
if ($zeilen[count] > 0) {
//äusere tabelle start
echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
\n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
\n<tr><td valign='top'>");
$komment_query = "SELECT $tb_kat.kommentar AS kommentar FROM $tb_kat WHERE pid='$id' AND id='$kat_id_save'";
$komment_result = mysql_query($komment_query);
$komment = mysql_fetch_array($komment_result);
$kommentar = nl2br($komment[kommentar]);
echo "<font>$kommentar</font>";
echo ("\n</td></tr></table>
\n</td></tr></table></center>");
}
}
}
|
-
- |