[Intel i7 4770K] [ GTX 1070] [Asus ROG VI Gene] [Corsair AX860] [Corsair 16GB Vengeance LP] [120GBIntel 520] [Bitfenix Phenom M]
Citera för svar
Jag sitter och funderar på hur jag skall göra en meddelande-funktion i PHP likt den som används på facebook.
Just nu sitter jag på två tabeller i databasen (mysql). En som lagrar "likes" och en som lagrar "OSA" (dvs om man kommer eller inte kommer till ett evant). Tabellerna ser ut så här:
Tabell-likes: användarID, tidpunkt för like, ID för forumspost
Tabell-OSA: användarID, tidpunkt för OSA, ID för event
Sen har jag såklart en tabell för användare, en för forumstrådar, event m.m.
Det jag vill få ut skall se ut såhär:
AnvändareX och 7 till personer gillar forumsposttitel1
AnvändareY och 2 till personer gillar forumsposttitel2
AnvändareX och 2 till personer skall besöka eventnamn1
Där användaren som nämns vid namn är den som sist likade/OSAde och resultaten skall givetvis vara listade med det som hände senast längst upp (i exemplet ovan har alltså AnvändareX gillat forumsposttitel1 efter att AnvändareY gillat forumsposttitel2.....).
Hur gör jag detta på enklast sätt? Jag kan nog koda ihop någon lösning själv, men skulle nog inte bli så effektiv lösning.
Jag sitter och funderar på hur jag skall göra en meddelande-funktion i PHP likt den som används på facebook.
Just nu sitter jag på två tabeller i databasen (mysql). En som lagrar "likes" och en som lagrar "OSA" (dvs om man kommer eller inte kommer till ett evant). Tabellerna ser ut så här:
Tabell-likes: användarID, tidpunkt för like, ID för forumspost
Tabell-OSA: användarID, tidpunkt för OSA, ID för event
Sen har jag såklart en tabell för användare, en för forumstrådar, event m.m.
Det jag vill få ut skall se ut såhär:
AnvändareX och 7 till personer gillar forumsposttitel1
AnvändareY och 2 till personer gillar forumsposttitel2
AnvändareX och 2 till personer skall besöka eventnamn1
Där användaren som nämns vid namn är den som sist likade/OSAde och resultaten skall givetvis vara listade med det som hände senast längst upp (i exemplet ovan har alltså AnvändareX gillat forumsposttitel1 efter att AnvändareY gillat forumsposttitel2.....).
Hur gör jag detta på enklast sätt? Jag kan nog koda ihop någon lösning själv, men skulle nog inte bli så effektiv lösning.
Varför inte bara göra det och lära dig en smula samtidigt?
Det du kan göra är att hämta upp den senaste tillagda "liken" i databasen för att få fram vem som la den senast.
[Intel i7 4770K] [ GTX 1070] [Asus ROG VI Gene] [Corsair AX860] [Corsair 16GB Vengeance LP] [120GBIntel 520] [Bitfenix Phenom M]
Citera för svar
Jag sitter och funderar på hur jag skall göra en meddelande-funktion i PHP likt den som används på facebook.
Just nu sitter jag på två tabeller i databasen (mysql). En som lagrar "likes" och en som lagrar "OSA" (dvs om man kommer eller inte kommer till ett evant). Tabellerna ser ut så här:
Tabell-likes: användarID, tidpunkt för like, ID för forumspost
Tabell-OSA: användarID, tidpunkt för OSA, ID för event
Sen har jag såklart en tabell för användare, en för forumstrådar, event m.m.
Det jag vill få ut skall se ut såhär:
AnvändareX och 7 till personer gillar forumsposttitel1
AnvändareY och 2 till personer gillar forumsposttitel2
AnvändareX och 2 till personer skall besöka eventnamn1
Där användaren som nämns vid namn är den som sist likade/OSAde och resultaten skall givetvis vara listade med det som hände senast längst upp (i exemplet ovan har alltså AnvändareX gillat forumsposttitel1 efter att AnvändareY gillat forumsposttitel2.....).
Hur gör jag detta på enklast sätt? Jag kan nog koda ihop någon lösning själv, men skulle nog inte bli så effektiv lösning.
Börja med att koda ihop något själv först och som posten ovan säger, lära dig något på vägen. När du har kod som kan förbättras kan vi hjälpa dig enklare, just nu är det som att köra bil och navigera blind.
ᕦ(ツ)ᕤ
Nu ser det ut såhär, vilket genererar det önskade resultatet, men 4 querys känns rätt tungt!?
$osa_ids = $likes_ids = array();
/* GET OSA IDs */
$result = mysql_query('SELECT t.id
FROM calendar_osa AS c
INNER JOIN topics AS t ON (c.forum_thread_id=t.id)
GROUP BY t.id ORDER BY c.osade_time DESC LIMIT 7') or exit(mysql_error());
while ($cur_post = mysql_fetch_assoc($result))
$osa_ids[] = $cur_post['id'];
/* GET LIKES IDs */
$result = mysql_query('SELECT p.id
FROM likes AS l
INNER JOIN posts AS p ON (l.forum_post_id=p.id)
GROUP BY p.id ORDER BY l.liked_time DESC LIMIT 7') or exit(mysql_error());
while ($cur_post = mysql_fetch_assoc($result))
$likes_ids[] = $cur_post['id'];
// GET OSA RESULTS
$result = mysql_query('SELECT c.osa, c.osade_time, u.username AS action_username, t.subject, t.id AS tid, count(c.osa) AS ccount
FROM users AS u
INNER JOIN calendar_osa AS c ON (u.id=c.user_id)
INNER JOIN topics AS t ON (c.forum_thread_id=t.id)
WHERE t.id IN ('.implode(',',$osa_ids).') GROUP BY t.id, c.osa ORDER BY c.osade_time DESC') or exit(mysql_error());
$compare_list = array();
while ($cur_cal = mysql_fetch_assoc($result))
{
// Om någon händelse råkar ha exakt samma tidpunkt som en annan...
while(isset($compare_list[$cur_cal['osade_time']])) {
++$cur_cal['osade_time'];
}
$compare_list[$cur_cal['osade_time']] = $cur_cal;
}
// GET LIKES RESULTS
$result = mysql_query('SELECT l.liked_time, u.username AS action_username, uu.username AS poster_username, p.id AS pid, count(l.liked_time) AS ccount
FROM users AS u
INNER JOIN likes AS l ON (l.user_id=u.id)
INNER JOIN posts AS p ON (l.forum_post_id=p.id)
INNER JOIN users AS uu ON (p.poster_id=uu.id)
WHERE p.id IN ('.implode(',',$likes_ids).') GROUP BY p.id ORDER BY l.liked_time DESC') or exit(mysql_error());
while ($cur_cal = mysql_fetch_assoc($result))
{
// Om någon händelse råkar ha exakt samma tidpunkt som en annan...
while(isset($compare_list[$cur_cal['liked_time']])) {
++$cur_cal['liked_time'];
}
$compare_list[$cur_cal['liked_time']] = $cur_cal;
}
krsort($compare_list);
foreach($compare_list AS $key => $value) {
if (isset($value['osa'])) { // OSA
// Gör nått kul
}
else { // Likes
// Gör nått kul
}
}
Det jag gör är alltså att hämta ID ur tabellerna för OSA och likes. Sen hämtar jag resultaten, sätter ihop dem och sorterar dem efter tid.
Copyright © 1999–2023 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.