it-swarm.com.ru

MySQL выбирают где равно нескольким значениям

У меня есть две базы данных, в которых я храню информацию о том, кто за кем следит, и другую, где хранятся записи, которые делает пользователь.

Я хочу выбрать из следующей базы данных всех людей, за которыми следует пользователь, и вывести имена пользователей, за которыми следует этот пользователь, и запросить в базе данных сообщений сообщения этого пользователя.

Моя проблема в том, что если пользователь подписан на нескольких пользователей, Я повторил из-за идентификаторов пользователей, за которыми подписался этот пользователь, и я получил 44443344330

Когда я разделяю каждый идентификатор с помощью комманов, я получаю:

44,44,33,44,33,0, 

так давайте дадим это переменная $user_ids;

$user_ids = "44,44,33,44,33,0, ";

запрос:

$get_posts = mysql_query("SELECT * FROM posts WHERE userid = '$user_ids'");

но все, что он делает, это показывает записи первого идентификатора пользователя, 44.

Как я могу получить все записи для всех пользователей?

19
frank

Запрос должен быть:

SELECT * FROM posts WHERE userid IN (44,44,33,44,33,0)

Однако вам, возможно, придется переосмыслить модель данных и убедиться, что она нормализована, чтобы вы могли выразить эту конструкцию непосредственно в базе данных, не повторяя строку через запятую.

Почему у вас две базы данных ? Вы имеете в виду две таблицы ?

25
Kerrek SB

Может быть, вы хотите использовать IN

SELECT * FROM posts WHERE userid IN ($user_ids)
21
james_bond

Предполагая, что у вас есть два tabels , а не базы данных, и что таблица (давайте назовем это «друзья»), которая описывает, кто следует, кто похож

table friends(
  userid
  friendid
)

тогда запрос на получение сообщений от друзей Х будет

SELECT
 p.* 
FROM posts p
  JOIN friends f ON(p.userid = f.friendid)
WHERE f.userid = X
1
ain
$var= str_replace(","," or userid = ","userid =$your_data_from_db");

ваш myqsl_query = SELECT * FROM posts where $var

0
$get_posts = mysql_query("SELECT * FROM posts WHERE userid in '($user_ids)'");
0
Shaun Hare