mypoint Posted February 12, 2012 Report Share Posted February 12, 2012 (edited) Kārtējā problēma manā pusē! Lieta ir tāda ka vajadzētu limitēt lai no konkrētās tabulas (m) izvelk tikai vienu ierakstu. $query="SELECT * FROM m,d WHERE d.did=m.id"; Pie viena arī pajautāšu intereses pēc: Ja piemēram abām tabulām ir vienādi lauki. m tabula: ID | NAME | DATE d tabula: ID | NAME | DATE Kā lai no abām tabulām izvelk DATE un NAME, ja abas tabulas ir sasaistītas: $query="SELECT * FROM m,d WHERE d.name=m.name"; Paldies jau iepriekš! Edited February 12, 2012 by mypoint Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 12, 2012 Report Share Posted February 12, 2012 LIMIT 1 `m`.`name` AS `unicorn` Quote Link to comment Share on other sites More sharing options...
mypoint Posted February 12, 2012 Author Report Share Posted February 12, 2012 Nu bet LIMIT 1 vaitad nelimitēs arī ierakstus no d tabulas, jo vajag lai tikai limitē no m tabulas. Paldies, noprovēšu! Quote Link to comment Share on other sites More sharing options...
codez Posted February 13, 2012 Report Share Posted February 13, 2012 vienkaŗšā gadījumā: SELECT * FROM m, d WHERE m.name=d.name GROUP BY m.name; ja vajdzīga kaut kāds nosacījums tam vienīgajam ierakstam, ko peisaistīt m tabulai no d, tad: Šijā piemērā, tiks ņemts pēdējais atbilstošais d ieraksts. SELECT * FROM m, (SELECT * FROM d ORDER BY id DESC) as d WHERE m.name=d.name GROUP BY m.name; Quote Link to comment Share on other sites More sharing options...
marrtins Posted February 13, 2012 Report Share Posted February 13, 2012 Šijā piemērā, tiks ņemts pēdējais atbilstošais d ieraksts. Pēdējais? Man izskatās, ka tiks sakārtoti. Piemet LIMIT 1 un tad jau gan sanāks pēdējais :) ... FROM m, (SELECT * FROM d ORDER BY id DESC LIMIT 1) as d ... Quote Link to comment Share on other sites More sharing options...
codez Posted February 13, 2012 Report Share Posted February 13, 2012 Ja pieliksi klāt LIMIT 1, tad pagaidu tabulā būs tikai 1 ieraksts. Joinojot to ar m tabulu, tu dabūsi labi, ja vienu ierakstu vispār. Bet vajadzīgs ir katras m tabulas ierakstam 1 atbilstošo no d tabulas. Tā kā d tabula var būt vairāki atbilstoši ieraksti, tad otrajā piemērā parādīts, kā noteikti kārtību, kura noteiks kurus atbilstošos ierakstus ņemt. Quote Link to comment Share on other sites More sharing options...
marrtins Posted February 13, 2012 Report Share Posted February 13, 2012 Ja pieliksi klāt LIMIT 1, tad pagaidu tabulā būs tikai 1 ieraksts. Joinojot to ar m tabulu, tu dabūsi labi, ja vienu ierakstu vispār. Bet vajadzīgs ir katras m tabulas ierakstam 1 atbilstošo no d tabulas. Nez, prasīts ir "vajadzētu limitēt lai no konkrētās tabulas (m) izvelk tikai vienu ierakstu" Quote Link to comment Share on other sites More sharing options...
briedis Posted February 13, 2012 Report Share Posted February 13, 2012 LIMIT, cik atceros, apakšvaicājumiem nemaz nevarējai izmantot. Risinājums - vispirms atlasīt vajadzīgo skaitu ar ID, tad ielikt otrā kvērijā SELECT * FROM tabula WHERE id IN (1,2,3,4,5....) Tad arī būs vajadzīgais limits... Quote Link to comment Share on other sites More sharing options...
marrtins Posted February 13, 2012 Report Share Posted February 13, 2012 LIMIT, cik atceros, apakšvaicājumiem nemaz nevarējai izmantot. Ej nu ej? :) Pietam, tas nav subselects, bet derived table. Quote Link to comment Share on other sites More sharing options...
briedis Posted February 13, 2012 Report Share Posted February 13, 2012 Ej nu ej? :) Pietam, tas nav subselects, bet derived table. Nu fig viņ zin kas ir šitais tad: SELECT ut . * FROM user_task WHERE user_id IN ( SELECT id FROM user ORDER BY date_registered DESC LIMIT 10) MySQL said: Documentation #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Quote Link to comment Share on other sites More sharing options...
marrtins Posted February 13, 2012 Report Share Posted February 13, 2012 (edited) Hmm, par šādu LIMIT prikolu nemaz nezināju. Bet tādas konstrukcijas arī nav nekad nācies izmantot - to jau var pārvērst par JOINu. SELECT * FROM user_task JOIN user ON user_task.user_id=user.id ORDER BY date_registered DESC LIMIT 10 Katrā ziņā parastos subselektos vai derived tabulās limit man stādā. Edited February 13, 2012 by marrtins Quote Link to comment Share on other sites More sharing options...
Maris-S Posted February 14, 2012 Report Share Posted February 14, 2012 (edited) Briedis, tas kļūdas paziņojums visu diezgan labi izskaidro. :) This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquer Šim vaicājumam limit nestrādā tāpēc, ka to mēģini izmantot IN konstrukcijā. Pašam apakšvaicājumam kā tādam limits strādā, dažreiz pat to vajag obligāti. Vienkāršs piemērs: select * from web_section_names where tree_id > (select id from web_sections where id > 7 limit 1) Šajā gadījumā limit ir vajadzīgs, jo bez tā apakšvaicājums atgriezīs vairāk nekā vienu rindu. Edited February 14, 2012 by Maris-S Quote Link to comment Share on other sites More sharing options...
briedis Posted February 14, 2012 Report Share Posted February 14, 2012 Briedis, tas kļūdas paziņojums visu diezgan labi izskaidro. :) This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquer Šim vaicājumam limit nestrādā tāpēc, ka to mēģini izmantot IN konstrukcijā. Pašam apakšvaicājumam kā tādam limits strādā, dažreiz pat to vajag obligāti. Vienkāršs piemērs: select * from web_section_names where tree_id > (select id from web_sections where id > 7 limit 1) Šajā gadījumā limit ir vajadzīgs, jo bez tā apakšvaicājums atgriezīs vairāk nekā vienu rindu. Hmm, tev taisnība, es nebiju "tā" paskatījies uz šo ziņojumu. Bet anyway, visbiežāk tāpat jālieot IN() :( Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.