Jump to content
php.lv forumi

select timeline for user


goma smile

Recommended Posts

Piemēram iedomājieties, 3 tabulas:

 

Video

Foto
Blogs

 

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

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 = :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.

Link to comment
Share on other sites

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).

Link to comment
Share on other sites

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 by jurchiks
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...