Portál AbcLinuxu, 26. dubna 2024 01:38


Dotaz: PHP, MySQL a spravne pojmenovani sloupecku

18.1.2022 20:31 Vlasta
PHP, MySQL a spravne pojmenovani sloupecku
Přečteno: 1372×
Odpovědět | Admin
Ahoj,

omluvte prosim zacatecnicky dotaz, ale peru se s timto: mam nasledujici tabulky:
CREATE TABLE `countries` (
  `id` int ...
  `name` varchar(255) ...
)

CREATE TABLE `cities` (
  `id` int ...
  `country_id` int ...
  `name` varchar(255) ...
)

CREATE TABLE `streets` (
  `id` int ...
  `city_id` int ...
  `name` varchar(255) ...
)
Potom dotaz:
SELECT countries.name, cities.name, streets.name 
FROM countries 
LEFT JOIN cities ON cities.country_id=countries.id 
LEFT JOIN streets ON streets.city_id=cities.id 
WHERE 1
Mi vrati vysledek, dejmetomu:
[name][name][name]
|Czechia|Brno|Kounicova|
|Czechia|Brno|Cejl|
Jak se s tim potom pracuje treba v PHP, kdyz dam treba mysqli_fetch_assoc, jak poznam ktere "name" se vztahuje k jake tabulce?

Jasne, ze si muzu v tom dotazu dat "AS country_name ... AS city_name", ale co slozitejsi dotazy nez tenhle? To si usoupu prsty

Nebo si ty sloupecky muzu pojmenovat jako country_id, country_name, city_country_id, city_name, ...

Nebo mi neco unika? Existuje zpusob, jak mohu zachovat tabulky i dotaz v te prvni podobe, viz vyse, a z vystupu v PHP pak poznam z ktere tabulky je ktere "name"?

Dekuji za vas cas

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.1.2022 21:28 X
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pojmenovat vsechny sloupce v tabulkach stejne je kravina presne z tohoto duvodu a proste spatny navrh databaze. Osobne, to mnozne cislo v nazvu jsi si take mohl odpustit.

18.1.2022 22:22 X
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Ale mozna se pletu..
24.1.2022 22:27 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Stejné názvy sloupců používám zcela běžně. Například id mám téměř v každé tabulce. Aliasy jsou potřebné i kvůli převodu mezi konvencemi. Například street_name AS streetName mi krásně převede jméno podle zvyklostí v PHP a můžu se pak na něj odkazovat třeba $row->streetName. Je to užitečné i v případě kolizi s klíčovými slovy.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
2.2.2022 16:12 ehmmm
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Nesouhlasim. Me osobne nevadi ani jeden z tech pristupu.

Kdyz mam tabulku CITIES, tak ID muzu pojmenovat jenom jako ID, nebo jako CITY_ID/ID_CITY. Stejne tak NAME muze ale nemusi byt CITY_NAME, zalezi na zvyku v danem kolektivu. Proc duplikovat nazev tabulky.

A kdyz pak joinuje nekolik tabulek se stejnymi nazvy sloupcu do sebe, tak mu nic nebrani napsat neco jako (a je slusnost to tak udelat):

select CITY.NAME as CITY_NAME, COUNTRY.NAME as COUNTRY_NAME from COUNTRY left outer join CITY on ...

A co se tyka mnozneho cisla v nazvu tabulky, tak opet dle vkusu kazdeho soudruha. U jednoho zakaznika mame tabulky MACHINES, PROJECTS, SHIFTS a nijak me to nepohorsuje.

Spis povazuji za dulezite nejak nazvem rozlisit tabulky, ktere se chovaji jako "cisleniky" (seznam lidi, mest, stroju) a tabulky, ktere obsahuji data posbirana v case (udalosti, teploty, vyrobene kusy...). V jeden firme tyhle tabulky mely priponu _DATA, v jine _HIST a oboji se mi libilo.
Řešení 1× (OldFrog {Ondra Nemecek})
20.1.2022 10:43 EtDirloth | skóre: 11
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pisat aliasy pre stlpce SELECT klauzuly je spravny sposob. Vobec nemaj pocit, ze si upises prsty - selecty nerobi zlozitym pocet stlpcov, ale joinov, pripadne jeho dalsie klauzuly. Je to to iste, ako ked pomenuvas premennu v PHP - tiez si neurobis na zaciatku programu globalny array, do ktoreho si ukladas a citas hodnoty premennych cez ciselny index.

Vylepsit alias vies tym, ze si select deklarujes ako view. To ma vyznam ak: A predrecnikove pomenovacie kraviny neries
24.1.2022 13:37 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Pokud sloupečky označují stejnou věc, pojmenovávám je stejně ve všech tabulkách.

Dokonvertoval jsem k tomu, že tabulky pojmenovávám jednotným číslem - množné brání automatickému generování sql, komplikuje ruční přejmenování v souborech při refaktoringu apod.

Kde je potřeba, píšu aliasy na tabulky i sloupce - složitější sql se pak lépe čte, navíc to některé dotazy vyžadují takže je pak jednotný styl všech dotazů.
-- OldFrog
20.1.2022 14:04 Nudící se důchodce
Rozbalit Rozbalit vše Re: PHP, MySQL a spravne pojmenovani sloupecku
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT co.name stat, ci.name obec, str.name ulice
-- SELECT co.name as country, ci.name as city, str.name as street
    FROM countries co
        LEFT JOIN 
        cities ci 
        ON ci.country_id=co.id 
        LEFT JOIN 
        streets str 
        ON str.city_id=ci.id 
    WHERE 1

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.