PHP Database per follower con mysql e php

Atopt12

Utente Iron
23 Luglio 2019
2
2
0
14
Ciao ragazzi c'è un modo per mettere nello stesso database tutte le persone seguite da un utente, dando la possibilità di estrarre i nomi, il numero totale degli utenti che lo seguono e dando la possibilita a follower di unfolloware?
Potreste farmi un esempio molto becero con php e mysql?

Per ora quello che ho fatto io funziona ma credo sia uno spreco esorbitante di potenza di calcolo e di spazio, c'è un modo più semplice e meno iterativo?
Vi allego quello creato:

Ho una pagina dove si può cliccare il bottone segui:
HTML:
<form method="post" action="segui.php">
    <input type="submit" value="segui">
    <input type="hidden" value="$utente" name="utente">
</form>

Porterà alla pagina php che inserirà dentro il database(follower), così fortmato:

id(int), nome(varchar), utente_follower(varchar)

questi dati, con questa richiesta:
PHP:
$utente_follower = $_SESSION["x"]; /* Sessione dell' utente che ha fatto il login, e che vuole diventare follower */
$utente = $_POST["utente"]; /* Utente che riceve il follow */

$prova = $connessione -> prepare("INSERT INTO follower (nome, utente_follower) VALUES (:utente, :utente_follower)");
$prova -> bindParam(':utente', $utente);
$prova -> bindParam(':utente_follower', $utente_follower);
$prova -> execute();

In questo modo nella pagina del profilo dell'utente potrò contare il numero di follow in questo modo:

PHP:
$prova1 = $connessione -> prepare("SELECT id FROM (nome, utente_follower) VALUES (:utente, :utente_follower)");
$prova1 -> bindParam(':utente', $utente);
$prova1 -> bindParam(':utente_follower', $utente_follower);
$prova1 -> execute();
 
Dovresti basarti su gli id per fare associazioni, basandoti sul nome e' impossibile cambiarli ma soprattutto e' lento (sempre piu' lento man mano che cresce il numero di utenti) e va contro il principio di db relazionale quale MySQL.

Ti serve una struttura come questa:
tables.png


In questo modo puoi aggiungere un follow cosi':
SQL:
INSERT INTO Follow (fromId,toId) VALUES (:follower, :followed);
Mettendo in follower l'id di chi sta eseguendo l'azione di seguire ed in followed l'id di chi viene seguito.

Per sapere quali utenti segue un determinato utente:
SQL:
SELECT nome FROM Utente INNER JOIN Follow ON fromId = Utente.id WHERE fromId = :id;

Per sapere quali follower ha un determinato utente:
SQL:
SELECT nome FROM Utente INNER JOIN Follow ON toId = Utente.id WHERE toId = :id;

Per il numero di follow ti basta selezionare count invece del nome.
 
per farlo io ho creato una tabella separata con 2 colonne, 'user_source' e 'user_target'; contengono rispettivamente l'utente che segue e l'utente seguito. Ho utilizzato doctrine che semplifica la faccenda, ma non è naturalmente indispensabile. Ti consiglio in utilizzare le associazzioni