PHP MySQL ищет данные в массиве

96
13

Я делаю практический проект, создающий базовую социальную сеть. У меня есть таблица с идентификатором пользователя, именем, фамилией и столбцом друзей, который содержит идентификационные номера всех других "пользователей", с которыми они дружат. Например, 3 "Дональд" "Утка" "4, 5, 23, 42".
Следующее работает, если я знаю значения:

if(mysqli_connect_errno($con))  {
echo "failed to connect" . mysql_connect_error();
} else {
$resulting = mysqli_query($con, "SELECT * FROM $tbl_name WHERE LastName LIKE '%$secondquery%'
OR LastName LIKE '%$firstquery%'
OR LastName LIKE '%$thirdquery%'
OR LastName LIKE '%$fourthquery%'
OR FirstName LIKE '%$secondquery%'
OR FirstName LIKE '%$firstquery%'
OR FirstName LIKE '%$thirdquery%'
OR FirstName LIKE '%$fourthquery%'
");
$counting = mysqli_num_rows($resulting);

if($counting != 0){
while($row = mysqli_fetch_array($resulting))
{
if($row['Profile'] != null) {
$defaultprofilepic = $row['Profile'];
}else {
$defaultprofilepic = "defaultprofile.JPG";
}
$PublicProfile = $row['ProfilePage'];
$Friends = array("4", "5", "23", "42")
if(in_array(42, $Friends)){
echo $row['FirstName'] . " is your friend!";
} else {
echo "Connect with " . $row['FirstName'];
}
}
}
}

Тем не менее, я не могу правильно работать, независимо от того, как данные отображаются в базе данных (например, "1", "2", "42" или "1, 2, 3, 4" или 1 2 3 4. Если 42 является первым в списке, то он часто работает, но это не очень полезно!

$Friends = array($row['Friends'];
if(in_array(42, $Friends)) {
echo $row['FirstName'] . " is your friend!";
} else {
echo "Connect with " . $row['FirstName'];
}

Я знаю, что там, вероятно, гораздо лучший способ сделать это или даже хранить соответствующие данные, поэтому любые предложения приветствуются! Я также знаю, что следующее может быть уязвимым для SQL-инъекции (поскольку "запросы" относятся к пользовательскому поиску), но не понимают должным образом, что все же помощь в этом также будет большой. Благодарю!

спросил(а) 2013-10-15T10:39:00+04:00 6 лет, 8 месяцев назад
1
Решение
77

Вы должны создать новую таблицу, например "друзья", и содержать в ней следующую структуру: user_id | friend_id. Он должен выглядеть так:

user_id | friend_id
1 | 1
1 | 2
1 | 3
2 | 4

А также

SELECT * FROM friends WHERE user_id = $our_user_id

И используйте синтаксис JOIN.

(Кстати, лучше узнать PDO)

ответил(а) 2013-10-15T10:56:00+04:00 6 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема