mysql ve php: Veri çıkarma

4 Cevap php

I'm stuck trying to figure out a solution for the problem below. It's quite complicated. So stay with me.

I retrieve a field from the user table which has his friends' user ids in the form of CSV (3,4,5,6,7)

Böyle bir şey arar transaction adında başka bir tablo var

tid    user1   user2   type_of_trade
1       3        4      barter
2       5        6      share
3       6        7      bargain 
4       4        3      barter
5       3        7      share

Şimdi benim arkadaşlarım işlemleri göstermek gerekir.

Yani, CSV bölünmüş bir dizi koyun ve her arkadaşınız için ben sorguyu koşuyorum

friends = explode(",","3,4,5,6,7");

for($i=0;$i<=count(friends);$i++)
{
// I execute this--SELECT * FROM transaction WHERE user1 = friends[$i] or user2 = friends[$i]
}

Şimdi aynı, 3 için olur 4, 5, 6, ve 7

When the query executes for 4, the same result comes and hence I'm getting duplicates. I've tried everything. But I'm unable to figure this out.

Birisi daha iyi bir çözüm önermek miyiz ya da bu kendisi değiştirilebilir?

4 Cevap

Bu özel durumda, mutlaka not explode o.

SELECT * FROM transaction WHERE user1 IN (3, 4, 5, 6, 7) OR user2 IN (3, 4, 5, 6, 7)

Bir IN karşılaştırma yapabiliriz:

SELECT DISTINCT *
FROM transaction
WHERE user1 IN (3,4,5,6,7) OR user2 IN (3,4,5,6,7)

Eğer her veritabanı tasarımını değiştirebilirsiniz, ben senin kullanıcıların arkadaşları için birçok ilişki için bir Birçok kullanarak öneriyoruz.

Bu CSV ayrıştırmak gerek kalmadan kullanıcıların arkadaş listesini saklamak için izin verir.

PHP & bu bir uygulama mysql burada; tonymarston.net, google için sadece ilk sonucu oldu: 'birçok mysql çok'.

Sen mysql IN() function kullanımını Myke gerekir. Bu benzersiz sonuçları garanti edecektir.

SELECT * FROM transactions WHERE user1 IN (3,4,5,6,7) OR user2 IN (3,4,5,6,7);