Autor Zpráva
Taps
Profil
V tabulce mám uloženo 10 záznamů. Je tam sloupec id, produkt a hit. Při výpise se mi položky řadí podle největšího id (ale to mi nefunguje tak jak bych si představoval). U každého záznamu se mi navíc zobrazuje šipka nahoru a šipka dollů a já potřebuji aby když kliknu na šipku nahoru aby se mi záznam posunul o řádek nahoru,a zároveň potřebuji aby ten záznam nad ním se posunul pod něj. Př. kliknu např. na šipku nahoru u záznamu 3 ten se mám posunou na 2 řádek a záznam z druhého řádku na 3.
Zkoušel jsem tento kod ale nějak to neposlouchá tak jak chci mohl by mi prosím poradit někdo nějaké lepší řešení . děkuji


<?
include "config.php";
$id=$_GET["id"];
$id2=$id+1;
$sql=mysql_query("Update produkty set hit=hit+1 where id='$id'");
$sql2=mysql_query("update produkty set hit=hit-1 where id='$id2'");
header("location:index.php");

?>
Školník
Profil
Tady je posunutí záznamu nahoru. Analogicky si udělej posunutí dolů a ošetření posunování krajních záznamů - které samozřejmě posunout nejdou..:-)

Vytáhl jsem to z komplexnější funkce, kterou jsem programoval před drahnou dobou, tak tam možná bude nějaká chyba.. Jde o princip, že?


$dotaz1 = mysql_fetch_array(mysql_query("SELECT id,hit FROM produkty WHERE id = '$ID'")); // informace o aktivne posunovanem zaznamu (posunovanem)

$id1 = $dotaz1["id"];
$hit1 = $dotaz1["hit"];

$dotaz2 = mysql_fetch_array(mysql_query("SELECT id,hit FROM produkty WHERE hit = $hit1 +1 ORDER BY id DESC LIMIT 1")); // informace o pasivne posunovanem zaznamu (odsunovanem)

$id2 = $dotaz2["id"];
$hit2 = $dotaz2["hit"];

if (($dotaz1) AND ($dotaz2)) {
$result = mysql_query("UPDATE produkty SET hit = hit +1 WHERE id = '$id1'"); // posunujeme aktivne posouvanou polozku
$result2 = mysql_query("UPDATE produkty SET hit = hit -1 WHERE id = '$id2'"); // posunujeme pasivne posunovanou polozku
}
Aleš Janda
Profil
Základní omyl je v těchto dvou řádcích:

$sql=mysql_query("Update produkty set hit=hit+1 where id='$id'");
$sql2=mysql_query("update produkty set hit=hit-1 where id='$id2'");

Řekněme, že id = 1 a id2 = 2. Takže:
1) v prvním kroku se všechno s id 1 dá na o 1 větší, tedy co má id 1, to má id 2. Po skončení jsou tedy v databázi dva řádky s id 2
2) v druhém kroku se všechno s id = 2 sníží o 1. Protože existují dva řádky s id 2, oba dva se sníží na 1.

Správné řešení je tedy první řádek změnit na něco, co v DB není, potom ten druhý změnit na ten první a ten první (už změněný) změnit na ten první ;-)
Toto téma je uzamčeno. Odpověď nelze zaslat.