J'essaie de créer un système @mention de base pour une application de micro-blogging que je crée (c'est un projet pour moi d'apprendre le PDO). J'ai lu quelques autres similarquestions et threads, mais je ne comprends toujours pas ce que tout le monde dit.Implémentation d'un système de base Twitter/Facebook @mention
Ce que j'ai en ce moment est une structure de base de données, quelque chose comme ceci:
**mentions:** <br>
mention_id (primary key auto increment) <br>
post_id (id from the posts table) <br>
user_id (id of the user who is mentioned) <br>
unread (either 0 or 1 depending on whether the post has been viewed by the user mentioned)
**posts:** <br>
post_id (primary key auto increment) <br>
user_id (id of the user who posted) <br>
post_content (the post contents)<br>
stamp (the post time stamp)
La façon dont je pense qu'il doit travailler en fonction des messages précédents est -, nous ajoutons le poste à la base de données, puis exécutez une fonction dessus pour récupérer le post_id ALORS nous lançons une instruction regex dessus et sortons toutes les références à @quechose, puis nous coupons le symbole @ et l'exécutons à travers une fonction pour vérifier s'il y a un utilisateur avec ce nom . S'il y a un utilisateur de ce nom, nous insérons leur user_id, le post_id et un 1 dans la colonne non lue dans la table mentions de la base de données afin que nous puissions vérifier si notre utilisateur actuellement connecté a des mentions non lues et les afficher. Je comprends que cette méthode peut ne pas évoluer bien, mais je ne cherche pas à détenir des millions d'utilisateurs que je veux juste une solution simple.
Alors ... ce que je cherche, c'est que quelqu'un jette un coup d'oeil à ce que j'ai jusqu'à présent et fais-moi savoir comment je peux le faire fonctionner et/ou suggérer une approche meilleure/plus simple.
Le résultat final que je veux est qu'un utilisateur puisse @mentionner un autre utilisateur et être capable de l'afficher comme une mention 'non-lu' jusqu'à ce que l'utilisateur mentionné affiche ses notifications (une liste de mentions etc.).
Ce que j'ai à ce jour est le suivant:
$post_content = 'Yo @jack, what up? I have a new email, [email protected]';
// to be later replaced with $post_content = $_POST['post_content'];
// right here would be a function add_post that
// inserts the post_content, user_id and time stamp into the database
function select_post($post_content){
$sql = "SELECT
post_id
FROM posts
WHERE post_content = $post_content
";
$stmt = $GLOBALS['db']->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $rows;
}
function valid_username($mentionedUser){
$sql = "SELECT
username
FROM users
WHERE username = $mentionedUser
";
$stmt = $GLOBALS['db']->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $rows;
}
function insert_mention($post_id, $mentionedUser){
$sql = "INSERT INTO
mentions (post_id, user_id, unread)
VALUES (:post_id, :user_id, 1) // 1 means unread
";
$stmt = $GLOBALS['db']->prepare($sql);
$stmt->bindParam(':user_id', $mentionedUser, PDO::PARAM_STR);
$stmt->bindParam(':post_id', $post_id, PDO::PARAM_INT);
$stmt->execute();
}
add_post($userid, $post_content);
$post_id = select_post($post_content);
if (preg_match("/\[email protected][a-zA-Z0-9]+/i", $post_content)) {
preg_match_all("/\[email protected][a-zA-Z0-9]+/i", $post_content, $mentions);
$mentions = array_map(function($str){ return substr($str, 1); }, $mentions[0]);
foreach($mentions as $mentionedUser){
if(!valid_username($mentionedUser)){ continue; }
insert_mention($post_id, $mentionedUser);
}
Suis-je même nulle part sur la bonne voie? Comment puis-je faire ce travail? S'il vous plaît, plus de détails dans votre réponse, le mieux, je suis intéressé par la syntaxe que vous utiliseriez et pas seulement un aperçu général.
Commencer à partir de [apprendre PDO] (http://stackoverflow.com/tags/pdo/info) –
@YourCommonSense merci, j'ai jeté un coup d'oeil et j'ai également regardé quelques-uns des liens là. Ça ne me donne toujours pas beaucoup de clarté. Ma logique est-elle complètement éteinte? Comment l'aborderiez-vous d'une manière simple comme un débutant? – Josh
"_So ...ce que je cherche, c'est que quelqu'un jette un coup d'oeil à ce que j'ai jusqu'à présent et qu'il me dise comment je peux le faire fonctionner et/ou suggérer une approche meilleure/plus simple. résultats, identifiez un problème particulier dans votre approche actuelle et ajustez votre question pour ne traiter que cette partie Répétez avec les questions futures si nécessaire –