Portál AbcLinuxu, 21. září 2024 00:22
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 1Mi 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:
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.
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
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.