Jump to content
php.lv forumi

mysql SELECT (vajag help)


justus

Recommended Posts

ir 2 tabulas

 

tabula 1

 

id | nosaukums | laiks | 1stradnieka_id| 2stradnieka_id | 3stradnieka_id

 

stradnieki

id | vards | laiks | biksu izmers | kedu firma | personigais auto

 

ir kautkas līdzīgs uzdevumu sarakstam, katru uzdevumu veic 3 stradnieki. vajag izselecteet vienā querijaa

 

laukus no pirmaas tabulas un laukus no otraas tabulas , kur sakrīt attiecīgie id ( visi id var ne vienmēr sakrist, jo dazreiz uzdevumu veic tikai 2 vai viens strādnieks).

 

Tātad jāsajoino 4 ieraksti .

Rekur mans nevieksmīgais provējums :

SELECT *  FROM tabula1 LEFT JOIN  stradnieki ON (tabula1.1stradnieka_id=stradnieki.id) LEFT JOIN stradnieki ON (tabula1.2stradnieka_id=stradnieki.id) LEFT JOIN stradnieki
ON(tabula1.3stradnieka_id=stradnieki.id) ORDER BY tabula1.nosaukums ASC

Link to comment
Share on other sites

Tu jau tur viedo kautko jocīgu. Ja pareizi sapratu, tad vajag šitā:

SELECT *  FROM tabula1 LEFT JOIN stradnieki ON tabula1=1stradnieka_id OR tabula1=2stradnieka_id OR tabula1=3stradnieka_id ORDER BY nosaukums ASC

Tikai nezinu, cik tas efektīvi būs, tb vai MySQL (droši vien) mācēs izmantot indeksu.

Un vai tomēr vienkāršāk nebija veidot parasto n:n relāciju (citādi daudz kur būs tev ORi jalieto):

tabula1(id, nosaukums,...)

starptabula(tabula1_id, stradnieka_id)

stradnieks(id, ...)

Un tad:

SELECT tabula1.*, stradnieks.* FROM tabula1 LEFT JOIN starptabula ON tabula1.id=tabula1_id LEFT JOIN stradnieks ON stradnieka_id=stradnieks.id ORDER BY nosaukums ASC

Edited by bubu
Link to comment
Share on other sites

Mana kļūda (bet tev jau vajadzēja pārbaudīt selektu, nevis tīru copy&paste taisīt...):

SELECT *  FROM tabula1 t LEFT JOIN stradnieki ON t.id=1stradnieka_id OR t.id=2stradnieka_id OR t.id=3stradnieka_id ORDER BY nosaukums ASC

Edited by bubu
Link to comment
Share on other sites

netaisiiju copy paste, lieta ir cita tas OR nederees , jo ja

t.id=1stradnieka_id OR t.id=2stradnieka_id , šie abi izpildās reizē tad tiek ģeenerēti 2 ieraksti pirmais ieraksts ar 1stradnieka_id laukiem un otrais ieraksts ar 2stradnieka_id .

 

Shēma ir tāda panjem 1 ierakstu no tabulas1, kur attieciigie id uz tabulu 2, tie id kas sakrīt vajag visus savaak vienaa ierakstaa(vinjiem nav obligaati visiem jaasakriit, ja nesakriit atlasa datus tikai no tabula 1).

Link to comment
Share on other sites

Tad manuprāt tādu kveriju kā tev vajag bez subselektiem nevar uzrakstīt.

Ja piemēram vajadzētu tikai tabula1 datus atlasīt, tad laikam varētu šādi:

SELECT DISTINCT(t.*) FROM tabula1 t LEFT JOIN stradnieki ON t.id=1stradnieka_id OR t.id=2stradnieka_id OR t.id=3stradnieka_id ORDER BY nosaukums ASC

Link to comment
Share on other sites

tabula1(id, nosaukums,...)

starptabula(tabula1_id, stradnieka_id)

stradnieks(id, ...)

Un tad:

SELECT tabula1.*, stradnieks.* FROM tabula1 LEFT JOIN starptabula ON tabula1.id=tabula1_id LEFT JOIN stradnieks ON stradnieka_id=stradnieks.id ORDER BY nosaukums ASC

15862[/snapback]

bet tikuntaa man nekaadiigi nesanaak no straadnieku tabulas izselekteet vairaak par vienu straadnieku, kaa meeginu veelreiz piejoinot stradnieku tabulu ar otraa stradnieka

id nobljaujaas: Not unique table/alias: 'stradnieki' , cik sapratu tad 2 Joinot nevar laikam

:angry:

Link to comment
Share on other sites

id nobljaujaas: Not unique table/alias: 'stradnieki' , cik sapratu tad 2 Joinot nevar laikam

15923[/snapback]

norādi tabulu, kuras stradnieki lauks jāizmanto

piem

select taba.a,tabb.a
from t taba
left join t tabb
on taba.id=tabb.id

Link to comment
Share on other sites

Tu domā to kveriju, kas ir quotē? Tam gan nevajadzētu mest tādu kļūdu.

15925[/snapback]

nu tas nemet bet es vinu pamainiiiju piejoinoju veelreiz tabulu stradnieki gala lai vareetu dabuut veel klaat otraa straadnieka datus.

Link to comment
Share on other sites

nu tas nemet bet es vinu pamainiiiju piejoinoju veelreiz tabulu stradnieki gala lai vareetu dabuut veel klaat otraa straadnieka datus.

15927[/snapback]

Nu bet loģiski, ka tur būs šāda kļūda, ja nepārsauksi otro tabulu, t.b. nelietosi tabulu aliasus, lai mysql zinātu kuras kolonnas pie kuras tabulas attiecās, jo citādi iznāk, ka eksistēs vienāda tabulas, kur nu vēl runājot par kolonnu nosaukumiem.
Link to comment
Share on other sites

×
×
  • Create New...