sql >> Database >  >> RDS >> Mysql

Bind 3 tabellen in 2 verschillende gevallen in MySQL

Heb 2 tabellen, "Institutions" en "Areas"

Sta "Areas" toe om naar zichzelf te linken, bijv. area_id, parent_area_id

Zo koppel je altijd een Instelling aan een area_id, waarna interne logica kan bepalen of dat gebied als District of Stad wordt beschouwd.

Dus je hebt nu

institutions (
    id UNSIGNED INT NOT NULL PK AI,
    area_id UNSIGNED INT NOT NULL,
    name VARCHAR NOT NULL
)

en

areas (
    id UNSIGNED INT NOT NULL PK AI,
    parent_area_id UNSIGNED INT NOT NULL DEFAULT 0,
    name VARCHAR NOT NULL,
    type ENUM('city','district') NOT NULL DEFAULT 'city' 
)

Het veld area.type is optioneel, maar als je ze als zodanig wilt definiëren, kan dat een manier zijn om dat binnen de database te doen (anders neem je gewoon aan dat als parent_area_id =0 het een stad is, anders een district)

Op deze manier is alles wat u doet bij het selecteren van het veld

SELECT *
FROM institutions
INNER JOIN areas
ON areas.id = institutions.area_id

U kunt er 100% zeker van zijn waar de instelling area_id naar linkt, er is geen vraagteken of u naar de tabel Districten of Steden moet gaan, het gaat zeker naar de tabel met gebieden die op zijn beurt Districten en Steden op dezelfde manier behandelt en informatie presenteert in een formaat dat je frontend dan kan interpreteren als stad of wijk. Optioneel zou je nog een stap verder kunnen gaan als je dat echt zou willen

SELECT
    i.*,
    COALESCE(a_parent.id,a_child.id) AS city_id,
    COALESCE(a_parent.name,a_child.name) AS city_name
FROM institutions AS i
INNER JOIN areas AS a_child
ON a_child.id = i.area_id
LEFT JOIN areas AS a_parent
ON a_parent.id = a_child.parent_area_id 

Dat zou bijvoorbeeld altijd de plaatsnaam retourneren, zelfs als de instelling gebonden was aan een specifiek district binnen een stad



  1. MySQL Dubbele fout met ALTER IGNORE TABLE

  2. mysql - Hoe om te gaan met zoekopdrachten met speciale tekens /(slash) en \(backslash)

  3. Lijst met gegevenstypen in SQL Server 2017

  4. De beste manier om een ​​gewogen zoekopdracht uit te voeren over meerdere velden in mysql?