goma smile Posted August 26, 2014 Report Share Posted August 26, 2014 Piemēram iedomājieties, 3 tabulas: Video FotoBlogs visās ir diezgan līdzīga uzbūve... kāds lauks vairāk kāds mazāk bet visās tabulās sakrīt viens lauks user_id, created_at ..... Es vēlos pēc viena noteikta lietotāja id izvilkt līdzīgi kā timeline.. proti pēc created_at izvilkt visus ierakstus... video video foto video blog video foto .... Timeline Quote Link to comment Share on other sites More sharing options...
codez Posted August 26, 2014 Report Share Posted August 26, 2014 (edited) Uztaisi tabulu user_feeds, kurā glābā: user_id, feed_type, feed_id. feed_type norāda kāda tipa posts tas ir, bet feed_id attiecīgi id šajā tipā. Tādā veidā ar vienu selectu tu ielasi visus id pēc user_id un tad katram tipam pa selectam ar IN (ids). Otrs variants, ja visu postu veidiem atškirās tikai dati un to formāts un tie nav jāindeksē, tad uztaisi vienu tabulu posts, kurā glabā id, user_id, created_at, type un data. Type laukā glabā posta tipu, piemēram 1 - texts/html, 2 - bilde, 3 - video, utt, bet data laukā, ja tips ir 1, tad tekstu vai html, ja tips ir 2, tad linku uz bildi vai bildes id, ja 3, tad linku uz video vai video id. Ja teiksim 4 ir galerija, tad data laukā var glabāt json serializētu masīvu ar linkiem uz bildēm vai masīvu ar id, piem., ['http://somedomain.com/img1.jpg', 'http://somedomain2.com/img2.png] vai [4,5,6] Edited August 26, 2014 by codez Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 26, 2014 Report Share Posted August 26, 2014 SELECT field1, field2, created_at FROM Video WHERE user_id = :userid UNION SELECT field1, field2, created_at FROM Foto WHERE user_id = :userid UNION SELECT field1, field2, created_at FROM Blogs WHERE user_id = :userid ORDER BY created_at DESC Kaut kā tā. Bet tas strādās tikai tad, ja selektotie lauki ir vienādi visās 3 tabulās. Ja vajag un ir iespējams, pārsauc nepieciešamo lauku nosaukumus, lai ir vienādi starp visām 3 tabulām. Quote Link to comment Share on other sites More sharing options...
goma smile Posted August 27, 2014 Author Report Share Posted August 27, 2014 man šķiet no skolas laikiem atminos ja ir pilnīgi visi laukī vienādi tad var select * from table1, table2, table3 where... SELECT field1, field2, created_at FROM Video WHERE user_id = :useridUNIONSELECT field1, field2, created_at FROM Foto WHERE user_id = :useridUNIONSELECT field1, field2, created_at FROM Blogs WHERE user_id = :useridORDER BY created_at DESCKaut kā tā.Bet tas strādās tikai tad, ja selektotie lauki ir vienādi visās 3 tabulās.Ja vajag un ir iespējams, pārsauc nepieciešamo lauku nosaukumus, lai ir vienādi starp visām 3 tabulām. Quote Link to comment Share on other sites More sharing options...
goma smile Posted August 27, 2014 Author Report Share Posted August 27, 2014 Nevēlies lūdzu uzrakstīt vaicājumu padalīties ar zināšanām? Uztaisi tabulu user_feeds, kurā glābā: user_id, feed_type, feed_id. feed_type norāda kāda tipa posts tas ir, bet feed_id attiecīgi id šajā tipā. Tādā veidā ar vienu selectu tu ielasi visus id pēc user_id un tad katram tipam pa selectam ar IN (ids). Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 27, 2014 Report Share Posted August 27, 2014 (edited) man šķiet no skolas laikiem atminos ja ir pilnīgi visi laukī vienādi tad var select * from table1, table2, table3 where... visās ir diezgan līdzīga uzbūve... kāds lauks vairāk kāds mazāk Anyway, es personīgi UNION neesmu nekad izmantojis (jeb varbūt vienu vienīgu reizi, bet vairs neatceros), un sastapies esmu burtiski kādas 3 reizes, tā kā negarantēju, ka manu kveriju nevar uzlabot, bet tam vajadzētu strādāt normāli. Edited August 27, 2014 by jurchiks Quote Link to comment Share on other sites More sharing options...
goma smile Posted August 27, 2014 Author Report Share Posted August 27, 2014 Vaicājums varētu izskatīties kkā šādi ? select * from `timeline` left join `blog` on `timeline`.`object_id` = `blog`.`id` and `timeline`.`type` = 'blog' left join `ask` on `timeline`.`id` = `ask`.`id` and `timeline`.`type` = 'ask' ... ? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 27, 2014 Report Share Posted August 27, 2014 Tu neizlasīji, ko es uz tavu pirmo postu atbildēju... 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.