2009-08-14 7 views
-1

i ont extrait une liste de noms d'utilisateur en utilisant les réponses de ceci:dois-je utiliser insérer sélectionner ou simplement faire une boucle avec insert?

how to optimize mysql query if i have too many OR operators in my query?

maintenant j'ai une autre question. J'ai une table d'amis composée de seulement 2 colonnes, le demandeur et mon pote forment tous deux une clé primaire composite.

Maintenant, supposons que j'ai un tableau d'amis facebook pour un utilisateur donné en utilisant la question SO ci-dessus. Comment puis-je automatiquement les rendre amis dans mon application Web?

Cela signifie que si j'ai 5 amis réels pour un utilisateur appelé 'usera'. J'ai besoin d'effectuer 10 instructions d'insertion. Par exemple: friendA, usera et usera, friendA pour que friendA se reflète comme un ami pour usera. Je comprends que la sélection d'insert est efficace. mais malheureusement, la liste des noms d'utilisateurs de ces amis est obtenue via un tableau PHP de valeurs utilisant la clause IN comme suggéré par les autres membres de l'OS dans ma question ci-dessus.

Alors que dois-je faire?

boucle

i

Devrais-

a) à travers les noms et exécuter 2 instructions d'insertion pour chaque étape?

b) utiliser insert select? mais comment le faire exactement?

mon DB est conçu de cette façon:

1 table appelé les utilisateurs avec les noms d'utilisateur et fb_uid où le nom d'utilisateur est la clé primaire et fb_uid est annulable.

1 table appelée amis avec une colonne appelée demandeur et une autre colonne appelée buddy. Les deux colonnes forment une clé composite.

Une amitié est établie entre 2 personnes (usera, userb) dans mon application web lorsque vous avez les données suivantes: (usera, userb) et (userb, usera) dans la table des amis.

Merci.

Répondre

1

Vous pouvez toujours faire un encart en vrac.

INSERT INTO friends (user_id, friend_user_id) VALUES (1, 2), (2, 1) 
+0

Y a-t-il un problème de performance avec l'utilisation d'encarts en masse? Je suis sûr que je peux utiliser PHP et faire une boucle pour construire un seul insert en vrac. devrais-je également ajouter dans insert ignorer ou insérer retardé? –

+0

Les insertions en vrac sont généralement plus rapides que les insertions régulières, le seul inconvénient est qu'il y a une limite sur le nombre de valeurs (un millier je crois). –

+0

Que faire si à mi-chemin à travers les encarts en vrac j'ai un enregistrement en double? les insertions réussies seront-elles abandonnées? –

0

Je voudrais aller avec INSERT SELECT de, vous pouvez trouver le detailed syntax here.

+0

suggérez-vous cela? même si l'insert select est combiné avec une clause IN? insérer dans les amis (demandeur, pote) sélectionnez 'usera', distinct (nom d'utilisateur) des utilisateurs où fb_uid dans (valeur1, valeur2, ...) –

+0

Je ne sais pas comment votre BD est conçue. –

+0

J'ai édité ma question et ai ajouté une idée de mon schéma de DB. –

Questions connexes