sql >> Databáze >  >> RDS >> Mysql

Jak umožnit uživateli vložit kamkoli do seznamu?

Nejjednodušší metodou z hlediska kódu je použití stylu propojeného seznamu, kde máte id dalšího prvku, spíše než hodnotu objednávky. To je méně užitečné v malých seznamech, ale když začnete zvětšovat velikost seznamu, aktualizace/přesuny/odstranění budou mnohem čistší a zabrání případné aktualizaci tisíců n-tic, aby se provedla změna 1 objednávky.

++ Nemám po ruce přesný příklad kódu, ale zavolali byste pro všechny seznamy uživatele

SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts 
JOIN db.user as User ON Posts.ownerid = User.id 
WHERE User.id='123' AND Posts.active = 1;

Tím byste získali všechny příspěvky jednoho uživatele a pak byste měli pole, které obsahuje id dalšího příspěvku. Chcete-li začít, budete potřebovat klíč k identifikaci prvního příspěvku (uložte ID prvního příspěvku do informací o uživateli). Poté, co vytáhnete první příspěvek, uchopíte jeho „další“ hodnotu a použijete ji k identifikaci dalšího příspěvku.

Na krátký seznam to vypadá trochu šíleně, ale představte si uživatele s 1000 příspěvky. Pokud potřebují přidat 1 příspěvek na 2. pozici. V tradičním numerickém objednávkovém systému byste nyní museli aktualizovat 999 dalších řádků aktualizací +1. S tímto řešením, pokud potřebujete vložit příspěvek na druhou pozici, jednoduše se zeptáte na první příspěvek, abyste získali jeho další hodnotu. Jakmile ji získáte, změníte ji na hodnotu nového druhého příspěvku a nastavíte další hodnotu druhého příspěvku tak, aby byla původně držena prvním.

[1st Post] --Next---> [2nd Post] --Next---> [3rd Post]

Po vložení:

[1st Post] -.                          .--> [2nd Post] --Next---> [3rd Post]
            `--Next--> [New 2nd Post]--`



  1. Aktualizujte dotaz pomocí PDO a MySQL

  2. Jaký je nejlepší způsob dynamického výběru názvu tabulky za běhu?

  3. Maximální počet znaků ve štítcích (názvy tabulek, sloupce atd.)

  4. PDO “Nezachycená výjimka 'PDOException' .. Nelze provádět dotazy, dokud jsou aktivní jiné dotazy bez vyrovnávací paměti. Zvažte použití PDOStatement::fetchAll().”