sql >> Database >  >> RDS >> Mysql

De beste manier om een ​​categorienaam van php op te slaan in een mysql-tabel

Het hangt ervan af,

Hoeveel categorieën heb je, hoe vaak moet je ze bijwerken?

Ik heb eerder de aanpak gevolgd waarbij ik Enum heb toegevoegd, maar heb ook een statische methode in een klasse geschreven en de geldige namen daar opgeslagen

class Item{


    public static function get_categories()
    {

        // only works in php >=5.4 otherwise use return array('Category1'...);
        return [
          'Category1' => 'Category1',
          'Category2' => 'Category2',
          'Category3' => 'Category3'
        ];
    }

}

Door het bovenstaande te doen, kunt u gemakkelijk toegang krijgen tot de array door Item::get_categories(), die moet overeenkomen met de waarden in het ENUM-veld in de database. Als u meer categorieën moet toevoegen, voegt u deze toe aan de database en vervolgens aan deze functie. U kunt dit gebruiken om de keuze van de gebruiker te valideren en de javascript-opties te genereren.

Maar!!!!

U noemt een seeding die uw tabel vult, dit zou uw ENUM niet gemakkelijk voor u kunnen bijwerken.

Ik zou een ENUM gebruiken, omdat

1). Het is gemakkelijk in te stellen2). Het is iets gemakkelijker dan het samenvoegen van de twee tabellen (maar JOINS zijn aas als je ze leert)3). Als je een secundaire tabel had gebruikt, zou je (zoals je al zei) eerst de waarde uit die tabel moeten opzoeken en vervolgens invoegen, of als de categorie in een vervolgkeuzelijst is gebruikt, moet je de categorie-ID en zijn naam gebruiken om de vervolgkeuzelijst in te vullen (ik zou het op deze manier doen)

Laatste gedachte

De prestaties van beide manieren (opzoektabel en ENUM) u zou zelfs het verschil merken, tenzij uw site heel erg druk is. Je zou nog steeds de categorieëntabel met elke versie in beide richtingen moeten bijwerken, maar het zou iets gemakkelijker zijn om een ​​INSERT-instructie te USE in plaats van een ALTER TABLE

Welke manier je ook kiest, als je het niet leuk vindt, zou het vrij eenvoudig zijn om je code bij te werken.

Ik hoop dat dit helpt, en veel succes

Onthoud Keep It Simple Stupid K.I.S.S




  1. MySQL-trigger voordat updatekolom wordt ingevoegd met nieuwe auto-increment-id

  2. is het mogelijk om accentgevoelige en hoofdletterongevoelige utf8-sortering in mysql te hebben?

  3. Grote resultatensets streamen met MySQL

  4. Opgeslagen procedure verhogen incompatibel met sql_mode=only_full_group_by ondanks dat sql_mode leeg is