L learn Medlem sedan jan. 2005 1 130 inlägg Frågan 18 feb. 2006 16:05 #1 Kommer inte på hur jag ska göra för att få sökvägen utskriven enligt nedan.
Tabell:
ID | Tillhör | Namn
------------------------
1 | 0 | Test
2 | 1 | Test2
3 | 2 | Test3
Är aktuell sidas id = 1 ska följande skrivas ut:
Test
Är aktuell sidas id = 2 ska följande skrivas ut:
Test > Test2
Är aktuell sidas id = 3 ska följande skrivas ut:
Test > Test2 > Test3
L learn Medlem sedan jan. 2005 1 130 inlägg Någon som har pejl på detta?
(PHP och MySQL)
sl0k Medlem sedan maj 2005 562 inlägg testa..
<?php
$sql = "SELECT Namn FROM tabell WHERE id>='$pageId'";
$res = mysql_query($sql) or die(mysql_error());
$laggTill = "";
while ($svar = mysql_fetch_assoc($res)) {
echo $laggTill . $svar['Namn'];
$laggTill = " > ";
}
?>
Matte Medlem sedan aug. 2000 2 975 inlägg Annars borde det gå att göra något i stil med:
// $id = aktuell sida
$result = "SELECT ID, Tillhör, Namn FROM tabell";
$list = array();
while ($row = mysql_fetch_assoc($result)) {
$list[$row['id']] = array('parent'=>$row['Tillhör'], 'text'=>$row['Namn']);
}
$path = array();
$path_id = $id;
if (array_key_exists($path_id, $list)) {
$path[] = $list[$path_id]['text'];
while ($list[$path_id]['parent'] != 0) {
$path_id = $list[$path_id]['parent'];
$path[] = $list[$path_id]['text'];
}
}
// Och så din utskrift
$path = implode(" > ", array_reverse($path));
L learn Medlem sedan jan. 2005 1 130 inlägg Matte
Jag får det inte att funka... ska inte:
$result = "SELECT ID, Tillhör, Namn FROM tabell";
vara:
$result = mysql_query("SELECT folderId, inFolderId, name FROM folder");
?
Visserligen funkar det ändå inte...
sl0k Medlem sedan maj 2005 562 inlägg Felmeddelanden ? Vad händer ? ingenting ? får du nån utskrift överhuvudtaget ?
testa att använda
$result = mysql_query("SELECT folderId, inFolderId, name FROM folder") or die(mysql_error());
Matte Medlem sedan aug. 2000 2 975 inlägg Jodå, det ska det vara :)
Ändra till:
$result = mysql_query("SELECT ID, Tillhör, Namn FROM tabell)";
$list = array();
while ($row = mysql_fetch_assoc($result)) {
$list[$row['ID']] = array('parent'=>$row['Tillhör'], 'text'=>$row['Namn']);
}
Index ska ju vara 'ID' istället för 'id'.
L learn Medlem sedan jan. 2005 1 130 inlägg Gjorde så här för att kunna "stega" omkring bland sidorna:
$list[$dir['ID']] = array('parent'=>$dir['Tillhör'], 'text'=> "<a href='?go=".$dir['ID']."'>".$dir['Namn']."</a>");
Kan jag kanske skriva det lite snyggare..? :)
Matte Medlem sedan aug. 2000 2 975 inlägg Om det är så mycket snyggare vet jag inte :)
Men du kan alltid göra så här:
// $id = aktuell sida
function make_link($id, $text)
{
return "<a href='?go=$id'>$text</a>";
}
$result = mysql_query("SELECT ID, Tillhör, Namn FROM tabell)";
$list = array();
while ($row = mysql_fetch_assoc($result)) {
$list[$row['ID']] = array('parent'=>$row['Tillhör'], 'text'=>$row['Namn']);
}
$path = array();
$path_id = $id;
if (array_key_exists($path_id, $list)) {
$path[] = make_link($path_id, $list[$path_id]['text']);
while ($list[$path_id]['parent'] != 0) {
$path_id = $list[$path_id]['parent'];
$path[] = make_link($path_id, $list[$path_id]['text']);
}
}
// Och så din utskrift
$path = implode(" > ", array_reverse($path));
L learn Medlem sedan jan. 2005 1 130 inlägg Jo, lite snyggare var det ju.
Kan passa på att fråga:
Jag vill räkna ut en sidas totala bildstorlek. Bilderna finns sparade i databasen.
Bildtabellen:
ID | SidID | Namn | Storlek
--------------------------------
1 | 0 | Bild1 | 100
2 | 1 | Bild2 | 150
3 | 2 | Bild3 | 210
SidID är den sida bilden tillhör och Storlek är bilden storlek.
Hur gör jag för att räkna ut en given sidas totala storlek gällande bilder. Lite klurigt med tanke på att en sida kan ha fler "tillhörande" sidor osv. Hoppas du/ni förstår vad jag menar...
Tack :bire
Matte Medlem sedan aug. 2000 2 975 inlägg Testa med
$sql = "SELECT SUM(Storlek) AS total FROM tabell WHERE SidID = $id";
där $id är lika med id för sidan.
L learn Medlem sedan jan. 2005 1 130 inlägg Fast bilden behöver ju inte tillhöra sidan $id för att räknas med, utan istället en annan sida som i sin tur tillhör $id... :l
Den totala storleken skall beräknas på alla bilder som ligger på alla sidor som tillhör den givna sidan...
Matte Medlem sedan aug. 2000 2 975 inlägg Testa då:
$result = mysql_query("SELECT ID, Tillhör FROM tabell)";
$list = array();
while ($row = mysql_fetch_assoc($result)) {
$list[$row['ID']] = $row['Tillhör'];
}
$path = array(0);
$path_id = $id;
if (array_key_exists($path_id, $list)) {
$path[] = $path_id;
while ($list[$path_id]['parent'] != 0) {
$path_id = $list[$path_id];
$path[] = $path_id;
}
}
$path = implode(", ", $path);
$sql = "SELECT SUM(Storlek) FROM tabell WHERE SidID IN ($path)";
$result = mysql_query($sql);
$summa = mysql_result($result, 0);
Om jag förstod dig rätt :)
L learn Medlem sedan jan. 2005 1 130 inlägg
Matte skrev:
$result = mysql_query("SELECT ID, Tillhör FROM tabell)";
Ska vara:
$result = mysql_query("SELECT ID, Tillhör FROM tabell");
:)
Funkar inte riktigt, vart kommer "['parent']" in i bilden...?
Matte Medlem sedan aug. 2000 2 975 inlägg
learn skrev:
Funkar inte riktigt, vart kommer "['parent']" in i bilden...?
Lite klipp/klistra-skräp :)
Ändra till
while ($list[$path_id] != 0) {
$path_id = $list[$path_id];
$path[] = $path_id;
}
L learn Medlem sedan jan. 2005 1 130 inlägg Kanon!
Om jag vill ha en funktion som tar borta alla bilder på en viss sida (och dess tillhörande sidor), hur ska jag göra?? Antar att det blir ngt liknande, men jag lyckas inte riktigt... :)
Matte Medlem sedan aug. 2000 2 975 inlägg Inte för att jag förstår varför du skulle plocka bort alla bilder för en hel sökväg, men principen är densamma som för när du räknar ut summan av bildstorleken.
Ändra bara
$sql = "SELECT SUM(Storlek) FROM tabell WHERE SidID IN ($path)";
till
$sql = "DELETE FROM tabell WHERE SidID IN ($path)";
L learn Medlem sedan jan. 2005 1 130 inlägg Detta borde ju isf funka, men det gör det inte. Här hämtas bara första tillhörande sidan... While-loopen körs inte alls. :q
// Börjar med att hämta alla sidor
$query = mysql_query("SELECT id, tillhör FROM sidor");
$list = array();
// Sparar sidorna i en array
while ($list = mysql_fetch_assoc($query)) {
$sidor[$list['id']] = $list['tillhör'];
}
$path = array();
$path_to_delete_in = $id; // Aktuell sida som skall raderas ifrån
// Kontrollerar om det finns någon tillhörande sida
if (array_key_exists($path_to_delete, $sidor)) {
$path[] = $path_to_delete;
// Sålänge sidan inte tillhör sidan 0
while ($sidor[$path_to_delete] != 0) {
$path_to_delete = $sidor[$path_to_delete];
$path[] = $path_to_delete;
}
}
// Radera alla bilderna på de sidor som tagits fram
$query = mysql_query("DELETE FROM bilder WHERE sidID IN ($path)");
Matte Medlem sedan aug. 2000 2 975 inlägg Till att börja med kan du ändra
$path_to_delete_in = $id; // Aktuell sida som skall raderas ifrån
// Till
$path_to_delete = $id; // Aktuell sida som skall raderas ifrån