Jump to content
php.lv forumi

Probleema ar domaashanu


Juzeppe

Recommended Posts

Taatad sekojosha probleema. ( Droshi vien ka pilniigi banaala bet probleema ir probleema)

Ir sekojoshas divas tabulas:

1: Rajoni

id | name_lv | name_ru

id, rajona nosaukums latviski, nosaukums krieviski

2: Pilsetas un pagasti

id | region | name_lv | name_ru

id, Rajona ID, nosaukums latviski, nosaukums krieviski

un luuk arii jautaajums:

 

Kaa vareetu dabuut sekojoshu izvadu?:

 

Rīga
--------
Āgenskalns
Aplokciems
Beberbeķi
Berģi
Bieķēnsala 

Ogre
--------
Jaunogre
Pārogre
Nekuriene
Elles pagasts

Link to comment
Share on other sites

To es saprotu ka join. vai nu viens ar join vai divi atsevishki kveriji - protams atkariigs no roku lenkja. Jautaajums kaa to visu pareizi izvadiit.

nezinu kapeec bet man sanaaca diivaini. Izdod teiksim rajonu Riigas un pieliek normaali apakshaa visus pagastus kas pie riigas, bet kad tiek izdots naakoshais rajons - Ogre, tad pie vinja apakshaa ir visi pagasti kas ir pie riigas + tie kas ir pie Ogres rajona.

Link to comment
Share on other sites

Nu es darītu tā, ka ar vienu kveriju iegūtu visas pilsētas/pagastus sakārtotus pēc rajona, kā arī katrai pilsētai/pagastai būtu piedžoinots rajona nosaukums. Tad ciklētu sarakstam cauri apt. šādā stilā:

 

$prev_region_id = '';

cikls {

 if ($row['region_id'] != $prev_region_id) {
  echo $row['region_name'];
 }
 $prev_region_id = $row['region_id'];

 echo $row['blabla_pashi_dati'];

}

Link to comment
Share on other sites

Pieņemot ka rajonu nosaukumi ir unikāli (kā vismaz pašlaik dzīvē ir):

create table rajoni (raj_id number, nosaukums varchar2(20));
create table pagasti(pag_id number, pag_raj_id number, nosaukums varchar2(20));
insert into rajoni values (1, 'Rīgas');
insert into rajoni values (2, 'Ogres');
insert into rajoni values (3, 'Cēsu');
insert into pagasti values (1, 1, 'Āgenskalns');
insert into pagasti values (2, 1, 'Aplokciems');
insert into pagasti values (3, 2, 'Jaunogre');
insert into pagasti values (3, 2, 'Pārogre');

Oraclē tas būtu tā:

SQL> SELECT coalesce(pag_nosaukums, raj_nosaukums) FROM (
 2	SELECT raj.nosaukums raj_nosaukums, pag.nosaukums pag_nosaukums
 3	FROM rajoni raj INNER JOIN pagasti pag ON (raj_id = pag_raj_id)
 4	UNION ALL
 5	SELECT nosaukums raj_nosaukums, NULL pag_nosaukums
 6	FROM rajoni
 7	UNION ALL
 8	SELECT nosaukums raj_nosaukums, '-------------' pag_nosaukums
 9	FROM rajoni
10	ORDER BY raj_nosaukums, pag_nosaukums NULLS FIRST
11  )
12  /

COALESCE(PAG_NOSAUKU
--------------------
Cēsu
-------------
Ogres
-------------
Jaunogre
Pārogre
Rīgas
-------------
Aplokciems
Āgenskalns

10 rows selected.

Tā kā MySQLā NULLS FIRST nav, tad jautājumu var atrisināt iepriekšējā atbildētāja bloga ieraksts http://apblog.lv/2008/10/14/sql-kartosana-un-null-vertibas/

Nezinu vai MySQLā ir f-ja coalesce. Tā kā svītriņas un rajona iznešana ārā acīmredzot ir smukuma lieta, tad iespējams, ka andrap risinājums no datu iegūšanas un prezentācijas atdalīšanas viedokļa būtu pareizāks ;)

 

P.S. ak jā un vēl vajadzēja tukšu rindiņu pēc katra rajona, bet nu tas tipa mājasdarbs :) Nu un protams tā ir nejaušība, ka - simbols mazāks, kā jebkurš alfabēta burts, lai būtu droši tur būtu jāpieliek kāda flaga kolona, pēc kuras kārtot.

 

Gints Plivna

http://datubazes.wordpress.com/

Link to comment
Share on other sites

×
×
  • Create New...