webForumDet fria alternativet

Sortering o utskrift..

5 svar · 409 visningar · startad av Yossarian

YossarianMedlem sedan aug. 200469 inlägg
#1

Om jag vill ändra sorteringen i min tabell...

Från:

abc
def
ghi

Till:

adg
beh
cfi

Några förslag?
Antal produkter är olika beroende på kategori, så man får väl räkna ut hur många det finns först i kategorin o sedan dela på 3?

Koden idag:

<?

$unitpp = 150;
$unitpr = 3;
if(!isset($_GET[start])) { $_GET[start] = 0; }
if(!isset($_GET[stop])) { $_GET[stop] = $unitpp; }

     $query = "SELECT * FROM grupper WHERE  grupp= '$grupp' AND alternativ='l' LIMIT $_GET[start],$unitpp";
   $result = mysql_query($query) or die(mysql_error());
   $i = 1;
      $result2 = mysql_query("SELECT * from grupper WHERE grupp = '$grupp'") or die(mysql_error());
      $antalrader = mysql_num_rows($result2);
      $sidor=ceil($antalrader/$unitpp);
      echo '<table bgcolor="#F9F7F7" cellspacing="0" cellpadding="0"><tr><td><B>Rubrik</B><BR><BR></td><tr>';
   while($row = mysql_fetch_array($result)) {
   ?>
   <td width="150">

    <a class="meny" target="main_shop" href="webshop.php?page=vgrupp&id=<?=$row["id"]?>&maskin=<?=$row["titel"]?>"><?=$row["titel"]?></a>

   </td> <?
   if($i%$unitpr == 0) { ?>
   </tr><tr><td height="2" background="img/empty.gif" colspan="<?=($unitpr + ($unitpr-1))?>"></td></tr><tr> <? } else { ?>
   <td width="2" background="img/empty.gif"></td> <? }
   $i++;

   }
   ?>
jonnyzMedlem sedan okt. 2004502 inlägg
#2

Ursäkta, men vad vill du åstadkomma?

Normalt klarar man sig ganska långt med ORDER BY i SQL.

The_HulkMedlem sedan juni 20031 837 inlägg
#3

förmodligen vill han/hon skriva ut produkterna lodrätt istället för vågrätt. ser iaf ut med bokstäverna.

enklast är kanske att spara det i en matris och sen skriva ut de till html.

YossarianMedlem sedan aug. 200469 inlägg
#4

Japp, vill sortera lodrätt...i 3 kolumner.
Får väl testa lite själv. Snickra a la Timell typ =)

lunne82Medlem sedan dec. 2003153 inlägg
#5

Hämta datan och lägg den, som The_Hulk sa, in en matris. Blir lite knöligt i PHP-kod så jag tar det visuellt.

+---+---+---+        +---+---+---+
| a | b | c |        | a | d | g |
+---+---+---+        +---+---+---+
| d | e | f |   =>   | b | e | h |
+---+---+---+        +---+---+---+
| g | h | i |        | c | f | i |
+---+---+---+        +---+---+---+

Skriver inte ut all kod, bara den "viktiga".
Nu blir det mycket arrayer...

Lägg datan för "a" i en array(id, titel) och lägg in det som första positionen i första raden:

// Initiera variabler
$matris = array(array());
$rad = 0;
$kol = 0;
$per_rad = 3;
// Index i matris är radnummer

// MySQL-fråga mm på dessa rader

// Sen loppar vi igenom resultatet
while($row = mysql_fetch_array($result)) {
  $matris[$rad][$kol++] = array($row['id'], $row['titel']);
  if ($kol % ($per_rad - 1) == 0) {
    $rad++;
    $kol = 0;
  }
}

Nu ska vi transversera matrisen. Om döper bokstäverna i min första bild efter dess position får man följande bild:

+----+----+----+        +----+----+----+
| 11 | 12 | 13 |        | 11 | 21 | 31 |
+----+----+----+        +----+----+----+
| 21 | 22 | 23 |   =>   | 12 | 22 | 32 |
+----+----+----+        +----+----+----+
| 31 | 32 | 33 |        | 13 | 23 | 33 |
+----+----+----+        +----+----+----+

Då loopar vi igenom $matris, utför detta och sparar resultatet i $ny_matris:

// Initiera variabler
$ny_matris = array(array());
$rad = 0;
$kol = 0;
while ($dar = $matris[$rad++]) {
  while ($lok = $matris[$rad][$kol++]) {
    $ny_matris[($kol-1)][($rad-1)] = $lok;
  }
  $kol = 0;
}

Klart! Kanske inte det mest optimala sättet, men det funkar.

YossarianMedlem sedan aug. 200469 inlägg
#6

Hmm, för en som aldrig jobbat med matriser...
Hur fanken ska det passas ihop med befintlig kod? =)

Gjorde ett försök, eller ja, knappt man kan kalla d försök..


<?

// Initiera variabler
$matris = array(id,titel);
$rad = 0;
$kol = 0;
$per_rad = 3;
// Index i matris är radnummer

$query = "SELECT * FROM grupper WHERE  grupp= '$grupp' AND alternativ='l'";
$result = mysql_query($query) or die(mysql_error());

// Sen loppar vi igenom resultatet
while($row = mysql_fetch_array($result)) {
  $matris[$rad][$kol++] = array($row['id'], $row['titel']);
  if ($kol % ($per_rad - 1) == 0) {
    $rad++;
    $kol = 0;
  }
}

// Initiera variabler
$ny_matris = array(array());
$rad = 0;
$kol = 0;
while ($dar = $matris[$rad++]) {
  while ($lok = $matris[$rad][$kol++]) {
    $ny_matris[($kol-1)][($rad-1)] = $lok;
  }
  $kol = 0;
}

   echo '<table bgcolor="#F9F7F7" cellspacing="0" cellpadding="0"><tr><td><B>LASERSKRIVARE</B><BR><BR></td><tr>';
   while($row = mysql_fetch_array($result)) {
   ?>
   <td width="150">

    <a class="meny" target="main_shop" href="webshop.php?page=vgrupp&id=<?=$row["id"]?>&maskin=<?=$row["titel"]?>"><?=$row["titel"]?></a>

   </td> <?
   if($i%$unitpr == 0) { ?>
   </tr><tr><td height="2" background="img/empty.gif" colspan="<?=($unitpr + ($unitpr-1))?>"></td></tr><tr> <? } else { ?>
   <td width="2" background="img/empty.gif"></td> <? }
   $i++;

   }
   ?>

Som ni ser....saknas biten där matrisen förs in i min gamla kod.

Hilfe?

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)