Come memorizzare un elenco di utenti e far sapere agli utenti che si trovano in tale elenco

StackOverflow https://stackoverflow.com/questions/1819048

  •  10-07-2019
  •  | 
  •  

Domanda

Sto costruendo un sito in cui un utente può aggiungere persone al proprio "elenco". Questo elenco appartiene all'utente, ma mi chiedo qual è il modo migliore per archiviare / recuperare / scorrere questo elenco in una funzione, per mostrare alle persone che sono nell'elenco, che sono lì e che l'hanno creato.

Quindi, una volta creato l'elenco di nomi utente, suppongo che lo memorizzi in un campo di tabella mysql, quindi scrivo una funzione che cercherebbe quella tabella per trovare eventuali elenchi che influenzano l'utente attualmente connesso.

La mia domanda è duplice. Innanzitutto, supponendo che l'elenco sia solo a-z 0-9 e trattini e caratteri di sottolineatura (senza spazi nei nomi utente, ma separati da spazi), quale sarebbe il miglior tipo di campo per archiviarlo come in mysql. In secondo luogo, quale sarebbe il metodo migliore / più veloce per la ricerca di un nome utente in molte liste?

È stato utile?

Soluzione

Varchar, indicizzazione e memorizzazione nella cache aggiuntiva.

Stai creando un usertable con un campo username e userid. Quindi crea una tabella user_relation in cui combini userid in modo da avere corrispondenze. Posizionare gli indici su tutte le relazioni di chiave esterna. Questo dovrebbe dare uno spettacolo abbastanza decente :)

modifica alcune informazioni aggiuntive per la configurazione

Tabella: utente UserID - Int (8) - Chiave primaria, Incremento automatico Nome - Varcahr (30) EmailAddress - Varchar (90) - Unico

Tabella: UserRelation ID - Int (8) - Chiave primaria, Incremento automatico UserID_Source - Int (8), Index (questo è l'utente) UserID_Friend - Int (8), Index (questo è un amico / relazione dell'utente)

In questo modo puoi facilmente memorizzare le relazioni con un determinato utente.

Per ottenere alcuni risultati usa una query come:

SELECT `User`.*, `User`.`UserID` AS `UserID_Source`
FROM   `User`
WHERE  `User`.`UserID` = `user_relation`.`user_id_source`

Puoi estendere la query di un JOIN per recuperare direttamente le corrispondenze di relazione o utilizzare un'altra query per questo;)

Altri suggerimenti

L'opzione migliore sarebbe quella di memorizzare ogni nome nella sua riga.

Se la tua lista contiene riferimenti ad altri membri (ogni persona ha la sua lista) la cosa migliore da fare è creare i dati in una tabella MySQL di qualche tipo (dato che MySQL è ottimizzato per questo tipo di cose), ad esempio bisogno di 2 semplici tabelle, tabella uno (tabella utente) avrebbe 2 colonne. ID (INT o BIGINT), Nome utente (VARCHAR).

Quindi la tua seconda tabella (link utente) avrebbe 2 voci a seconda che il collegamento sia fatto in modo bidirezionale o unidirezionale vedi sotto.

Bidirezionale : la tabella avrebbe 2 colonne, Utente1 (INT o BIGINT), Utente2 (INT o BIGINT). Per recuperare un elenco, è sufficiente eseguire una query su questa tabella per tutte le voci in cui l'ID utente è in Utente1 o Utente2.

Unidirezionale : la tabella avrebbe 2 colonne, Proprietario (INT o BIGINT), Persona (INT o BIGINT). Per recuperare un elenco per un utente è sufficiente interrogarlo per tutte le voci che appartengono a tale utente.

La differenza tra i due è che, bidirezionalmente, se ti aggiungo alla mia lista, sono automaticamente nella tua lista. Con Unidirectionally viene rimosso, quindi devi aggiungermi al tuo elenco affinché appaia sul tuo elenco, anche se sei sul mio elenco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top