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();
 

JunkCoder

Moderatore
5 Giugno 2020
1,274
23
1,112
508
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.
 

wasdunity

Utente Bronze
4 Settembre 2019
33
15
3
31
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