2015-05-29 236 views
0

我有一张表,其中必须使用MySQLi Query选择信息并将其推送到PHP数组的末尾。从MySql Query获取信息并将其放入PHP数组中

表的格式如下:

table = friends 

id user1 user1_id user2 user2_id datemade    accepted 
1 name1 1   name2 2   2015-05-27 03:24:32 1 
2 name3 3   name2 2   2015-05-27 03:24:32 1 
3 name3 3   name1 1   2015-05-27 03:24:32 1 
4 name4 4   name2 2   2015-05-27 03:24:32 1 
  • ID =的auto_incrementing号多事
  • USER1 =人的名字,要求作为朋友
  • user1_id =那个人的特殊的唯一身份证
  • user2 =接受/拒绝友谊的人的姓名
  • user2_id =该人''特殊的唯一ID
  • datemade =它的制作日期:P
  • accepted =他接受了吗? (不用担心这个)

我想选择所有用$ u的朋友。 在这个例子中,$ u的id是1(name是name1)。 运行查询后,它会将其推送到friend_array的末尾。

所以,如果我打印此阵列的输出将是:

2, 3 

因为,ID = 1是朋友ID = 2,ID = 3

我应该怎么做查询和我将如何推到一个数组(我知道有关array_push,但我不知道如何实现它)?

+0

欢迎来到Stack Overflow!这个问题在信息上有点短暂。你可以分享你的尝试,以及你遇到了什么问题? –

+0

你有没有想过正常化你的桌子?用user.id和friends.user_id1和friends.user_id2分别与用户和朋友表建立外键关系? – OllyBarca

+0

@JayBlanchard我试过了,这个查询'SELECT id,user2_id FROM $ friends WHERE user_id ='$ user_id''但我不知道如何使用它以及它返回的内容。 – MasudM

回答

0

请尝试此代码。它将返回所有用户的朋友的数组。

$sql = "SELECT user1 AS user FROM friends UNION SELECT user2 AS user FROM friends"; 

$data = mysqli_query($sql); 

while ($v = mysqli_fetch_assoc($data)) { 
$sql = mysqli_query("SELECT * FROM `friends` where (user1 = '" . $v['user'] . "' or user2 = '" . $v['user'] . "')"); 
$arr = array(); 
while ($array = mysqli_fetch_assoc($sql)) { 

    if ($array['user1'] == $v['user']) { 
     $arr[$v['user']][] = $array['user2_id']; 
    } else { 
     $arr[$v['user']][] = $array['user1_id']; 
    } 
    } 
} 
+1

不使用['mysql_ *](https://wiki.php.net/rfc/mysql_deprecation)扩展函数,它已经在PHP 5.5版本中正式弃用 – Girish

+0

我不同意这个...它使用UNION ..这意味着它可能会以更好的方式重写。 – geggleto

0

我终于明白了!

$sql = "SELECT COUNT(id) FROM friends WHERE user1_id='$log_id' AND accepted='1' OR user2_id='$log_id' AND accepted='1'"; 
$query = mysqli_query($db_conx, $sql); 
$query_count = mysqli_fetch_row($query); 
$friend_count = $query_count[0]; 
//echo($friend_count); //how many friends 
if($friend_count < 1){ 
    echo($u." has no friends yet"); 
} else { 
    $all_friends = array(); 
    $sql = "SELECT user1_id FROM friends WHERE user2_id='$log_id' AND accepted='1' ORDER BY RAND()"; 
    $query = mysqli_query($db_conx, $sql); 
    while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
     array_push($all_friends, $row["user1_id"]); 
    } 
    $sql = "SELECT user2_id FROM friends WHERE user1_id='$log_id' AND accepted='1' ORDER BY RAND()"; 
    $query = mysqli_query($db_conx, $sql); 
    while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
     array_push($all_friends, $row["user2_id"]); 
    } 
    $friendArrayCount = count($all_friends); 
} 

所以第一计数你有多少朋友来检查,如果您有任何,如果你不是,温度。出现的消息说没有朋友。如果你有一些朋友,它会运行一个查询来检查你的朋友是否都是列 - user1_id和user2_id。然后,它会最后将所有内容添加到$ all_friends数组中,然后计算您拥有的朋友数量。 谢谢大家帮助!

相关问题