Jump to content
php.lv forumi

Dati no 2 tabulām


Gacha

Recommended Posts

Līdz šim esmu lietojis pašus elementārākos sql pieprasījumus un ja vajadzēja ko vairāk, tad lietoju vairākus, vai arī piepalīdzēju ar php. Bet zinu, ka labāk visu izdara ar sql un tad tik ķerties pie php.

 

Tātad ir viena tabula:

id

data

 

Un otra tabula:

sec_id

description

 

Pirmās tabulas id ir = ar otrās sec_id. Pieņemsim, ka gribu

Select * from 1-tabula order by id desc

while(notiek shitais cikls){

Select * from 2-tabula where id='sec_id'

 

un te echo to description no 2-tabula un data no 2-tabula

}

 

Nu šitā es parasti daru, bet gribu to izdarīt to ar vienu sql pieprasījumu, ja nekļūdos tad to varētu ar LEFT JOIN, bet man kaut kā tas mysql manuālis galīgi nepielec, nesmu vēl piešāvies pie tā pareizas lietošanas. Būtu labi ja kāds man paskaidrotu šo lietu!

.......

Vēl viens jautājums!

 

Kāda atšķirība un kapēc tā dara?

1.var

Select * from tabula

$data = $row['data'];

2.var

Select (data) as x from tabula

$data = $row['x'];

 

 

Kādos gadījumos lieto otro gadījumu? Varbūt bik nepareizi, jo tādu neizmantoju, bet cerams, ka domu sapratāt!

Edited by Gacha
Link to comment
Share on other sites

1) SELECT * FROM tabula1, tabula2 WHERE id = sec_id

2) tas vajadzīgs, ja gadās kolonnas ar vienādiem nosaukumiem (dažādās tabulās), vai arī kolonnai nav vārda, vai tas arī pārāk garš. Tad izdevīgāk pārneimot kolonnu un lietot jauno nosaukumu.

Link to comment
Share on other sites

1) Nu un tad man būs arī $row['data'] $row['description'] katrs no savas tabulas kur id = ar to ko vajaga?

Prasu, jo pagaidam man nav pieejams serveris, kur iemeginat!

 

Bet ja izpildu to tavu pieprasijumu, tad man ir nepiecieshams zinat kadu id, bet ja es gribu shadi:

Pirma tabula ir tas id un DATA, kur kaut kadi dati, bet otra tabula katram shim DATA ir "description" apraksts, kuru gribetu ari izmest ara.

Select * from tabula1, tabula2 ...

while(pieprasijums){

$row['data']; //ar id=1

$row['description']; //ar to pashu 1

}

2) To as esmu izmantojis un saprotu, bet kapec izmanto (lauks) nevis * Vai ja ņem tikai dažus, tad tas atgriezīs tikai tos un vai tad tas pieprasijums notiks ātrāk?

Link to comment
Share on other sites

1) ja tev ir šādas tabulas

tabula1

---------

1 abc

2 ddd

3 cccc

 

un

 

tabula2

--------

1 aaaa

1 bvvv

2 trrrr

 

tad tas, ko es devu atgriezīs šādu rezultātu:

id data sec_id description

1 abc 1 aaaa

1 abc 1 bvvv

2 ddd 2 trrrr

 

Ja tev vajag kādu konkrētu ID vai kolonnas, tad raksti:

SELECT id, data, description FROM tab1, tab2 WHERE id = sec_id AND id = '$id'

Vai arī es nesaprotu, kas tev tur īsti ir vajadzīgs. Tev tur 1-n relācija, vai kā?

 

2) Laikam jau ir ātrāk, ja uzskaita pats savas kolonas, jo ja tu raksti *, tad sistēmai ir jāvēršas pie informācijas, kur definētas tabulas un jāvelk visi lauku nosaukumi ārā. Cik praksē esmu redzēhis Oracle serverim tas dod diezgan ievērojamu ātrdarbību.

Link to comment
Share on other sites

tamdēļ jau teu tas AS arī vajadzīgs - lai atšķirt 'data's

ir arī tāda lieta, kā JOIN - tabulu apvienošana pēc kaut kāda lauka

SELECT table1.data as `main`,
table2.data as `description`
FROM table1 LEFT JOIN table2 ON table2.sec_id=table1.id

 

vai izmantot vairāk, nekā divām tabulām.

Ja izmanto RIGHT JOIN, tad atgriezīs tikai tad, ja abās tabulās ir sakritošas att. kolonnas, ja LEFT JOIN, tad būtu jāņem arī tad, kad otrā tabulā datu nav.

Link to comment
Share on other sites

Viņam tak nesaucās tā vajadzīga kolonna kā data abās tabulās. Vienā ir data otrā description, nekādus AS nevajag.

 

Ja izmanto RIGHT JOIN, tad atgriezīs tikai tad, ja abās tabulās ir sakritošas att. kolonnas, ja LEFT JOIN, tad būtu jāņem arī tad, kad otrā tabulā datu nav.

Nu nu, te nu tu mānies :)

t1 LEFT JOIN t2 ON ... - atgriezīs visus ierakstus no t1 un tiem atbilstošos no t2 vai NULL, ja nav

t1 RIGHT JOIN t2 ON ... - atgriezīs visus ierakstus no t2 un tiem atbilstošos no t1 vai NULL, ja nav

t1 FULL JOIN t2 ON ... - atgriezīs visus ierakstus no t1 un t2 un, attiecīgi, tiem atbilstošos no t2 un t1 vai NULL, ja nav

Edited by bubu
Link to comment
Share on other sites

Aizej uz http://www.sqlite.org un novelc sqlite.exe, būs tev labs tūlis priekš offline ekperimentēšanai. Pats diezgan daudz to izmantoju.

Žēl, bet es esmu uz Linuxa :) Bet droši vien ir arī kādas alternatīvas :)

 

Paldies jums abiem par helpu, šis man daudz palīdzēja!

Link to comment
Share on other sites

Es sapratu, ka tu teici, ka RIGHT izvadīs tikai tādas rindiņas, kurām ir atbilstošs ieraksts otrajā tabulā, t.b. to pašu ko .. .FROM t1, t2 WHERE t1.id = t2.id

Nu bet ja jau ir normāla 1-n relācija, tad jau tiešām otrajā tabulā nebūs tādu ierakstu, uz kuriem referencējas pirmā tabula.

Edited by bubu
Link to comment
Share on other sites

×
×
  • Create New...