[Lekérés] Követett felhasználók "feed"
Sziasztok!
Egy ideje próbálok összerakni egy olyan lekérést, amely több táblából képes egyszerre kiolvasni adatokat.
Ez leginkább a facebook tickeréhez, vagy a spotify action bar-jához hasonlítható.
A felhasználók az users táblában, a követések a favs táblában, a listázandó dolgok pedig a posts és comments táblában találhatóak.
Táblákról:
users: userId, userName
favs: favId, favUser, favUser2, favStatus (0,1), favTime (INT 10)
- az user a követő, az user2 pedig, hogy kit
- status = 1: követi, status = 0: már nem követi
- time: ekkor történt a követés/kikövetés
posts: postId, postTitle, postTime (INT 10)
comments: commentPost, commentText, commentTime (INT 10)
No, itt tulajdonképpen az kellene, hogy ha futtatom a fetch_assoc() függvényt, akkor listázódjanak sorban a posztok és kommentek pl.: $data['type'] = (comment ? post? ), $data[userName], $data[content] = (maga a komment vagy a post címe), $data[time] = időpont.
Rengeteget gondolkodtam raja, de semmi működő lekérést nem sikerült még összeeszkábálni.
Már azzal is előrébb lennék, ha külön a kommentek és posztok számára lenne lekérés, amiket majd egy tömbbe rendezek.
A gondot a követések (favs) tábla okozza, mivel több sor tartozhat valakihez (status).
Nem kérem, hogy komplett megoldással álljon elő valaki, csak valami útmutatásra lenne szükségem. Dokumentációkat olvastam, de ilyenre megoldást még nem találtam és bevallom, hogy nincs sok időm rá (uni) (a lekérés saját használatra kell, nem feladat).
Előre is köszönöm a segítséget! :)
■ Egy ideje próbálok összerakni egy olyan lekérést, amely több táblából képes egyszerre kiolvasni adatokat.
Ez leginkább a facebook tickeréhez, vagy a spotify action bar-jához hasonlítható.
A felhasználók az users táblában, a követések a favs táblában, a listázandó dolgok pedig a posts és comments táblában találhatóak.
Táblákról:
users: userId, userName
favs: favId, favUser, favUser2, favStatus (0,1), favTime (INT 10)
- az user a követő, az user2 pedig, hogy kit
- status = 1: követi, status = 0: már nem követi
- time: ekkor történt a követés/kikövetés
posts: postId, postTitle, postTime (INT 10)
comments: commentPost, commentText, commentTime (INT 10)
No, itt tulajdonképpen az kellene, hogy ha futtatom a fetch_assoc() függvényt, akkor listázódjanak sorban a posztok és kommentek pl.: $data['type'] = (comment ? post? ), $data[userName], $data[content] = (maga a komment vagy a post címe), $data[time] = időpont.
Rengeteget gondolkodtam raja, de semmi működő lekérést nem sikerült még összeeszkábálni.
Már azzal is előrébb lennék, ha külön a kommentek és posztok számára lenne lekérés, amiket majd egy tömbbe rendezek.
A gondot a követések (favs) tábla okozza, mivel több sor tartozhat valakihez (status).
Nem kérem, hogy komplett megoldással álljon elő valaki, csak valami útmutatásra lenne szükségem. Dokumentációkat olvastam, de ilyenre megoldást még nem találtam és bevallom, hogy nincs sok időm rá (uni) (a lekérés saját használatra kell, nem feladat).
Előre is köszönöm a segítséget! :)
Ha nem teszed bele az
Legalábbis ha a favUser az a user id és nem a név. Ha a név van ott akkor olvasd el mi az a normalizálás.
union
Csináltam tesztként egy
PHP:
Problem 2: Plusz amit még nem tudok, hogy hogyan lehetne belefoglalni a lekérésbe azt, hogy csak a követetteké jelenjen meg. A problémát az okozza - mint említettem -, hogy egy felhasználónál több sor is van.
Pl.
id - user - user2 - status - time esetén
1, 2, 1, 10000000 <- követi
1, 2, 0, 11000000 <- már nem
1, 2, 1, 12000000 <- megint követi
Ezt INNER JOIN-nal próbáltam, de csak az első sort veszi figyelembe (id-t nézve), akármi lehet utána.
Mellékesen: Az UNION-os problémát ki lehet kerülni külön lekérésekkel, így csak a Problem 2 marad. Ebben az esetben kimenet + idő kerülne egy tömbbe, amit idő szerint lehetne rendezni.
A mellékes megoldást próbálva eddig jutottam:
Solution 1
Follow status adott
SELECT fowUser,fowUser2,followStatus
FROM following
WHERE fowUser = 29 AND fowUser2 = 41 AND time <= time
ORDER BY time DESC
LIMIT 1
Ugye ezt kellene összejoinolni a dalok soraival, csakhogy itt a fowUser2 és a time a dalok soraiból jön. Érzésre nem fog menni.
google mit mond erre?
Itt valami 'correlated subquery'-ről volna szó. Első ránézésre nem nagyon megy a dolog, de hajrá, olvasgass utána.
Szerintem valami külön tábla volna esetleg jó, amibe feldolgozod az adatokat és eltárolod az eredményt. Vagy ugyanez programból.
Solution 2 (?)
Tökéletes
A többi tevékenységet külön lekérésekkel kapom meg, amiket összerakok egy tömbbe, így lesz a különálló "tevékenységekből" összefüggő dolog.
UNION-nal mindenképpen kísérletezni fogok még.
Valójában nem is bonyolult a megoldás, csak én képzeltem bele extrém dolgokat. Ebből is látszik, hogy van még hova fejlődni.
Köszönöm!
/ ha Debrecenben vagy/leszel, meghívlak egy sörre /
Up: a group by mégsem jó (nem valós dolgok jönnek ki), de ezt muszáj lesz megoldanom magamtól. :)
Szívesen.
Valójában mégsem jó. Pár óra
Pár óra alvás után elővettem átnézni, hogy mégis hogyan válassza el a felhasználókat a dolog.
Ugye benne van kritériumként, hogy fowUser = 29, tehát elméletileg csak azok a sorok vannak lekérve, ahol ez 29, mégis látom azokat a sorokat, amiknél a playedBy 29.
Gondoltam, hogy az lehet a hiba, hogy követem magam, de nem.
Mikor csak magamat követem, akkor jól jelennek meg a dolgok.
Jelen esetben látom a saját dolgaimat is annak ellenére, hogy nem követem magam és mindenből kettő van egymás után.
A lekérés így néz ki:
Lehet félre kellene tenned a gépet a hétvégére..
A following táblában leszűröd magadra és időpontra, de a követett felhasználó id-je semmilyen kritériumban nem jelenik meg. Ígyhát.. ez a lekérdezés kb annyit csinál, hogy amikor követtél bárkit, abban az időszakban játszott dalokat listázza, de ez nem is fontos..
;)