IN (ВЫБРАТЬ .....) MYSQL - PullRequest
       3

IN (ВЫБРАТЬ .....) MYSQL

2 голосов
/ 02 февраля 2012

Я не говорю по-английски. Я использую гугл переводчик.

(`id` int(11) NOT NULL AUTO_INCREMENT,)
(`members` text NOT NULL)

У меня следующий запрос:

SELECT members FROM team WHERE id = 37

результат: 25,36,38,87 отлично работает

и у меня есть другой запрос:

SELECT * 
FROM users 
WHERE id_users IN ( 25,36,38,87 ) 

отлично работает

но это не работает

SELECT * 
FROM users 
WHERE id_users IN (SELECT members FROM team WHERE id = 37  ) 

Я должен исправить это с помощью PHP:

SELECT * FROM users WHERE id_users IN ( $members )

Большое спасибо всем. и опять извините за мой английский. Я использую Google переводчик. Очень хороший сайт

Добавлена ​​ схема из комментария:

CREATE TABLE IF NOT EXISTS team ( 
    id int(11) NOT NULL AUTO_INCREMENT, 
    members text NOT NULL, 
    PRIMARY KEY (id)
) 

CREATE TABLE IF NOT EXISTS users ( 
    id_users int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(100) CHARACTER SET latin1 NOT NULL,
    PRIMARY KEY (id_usuario) 
)

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Вы должны исправить свою схему, чтобы использовать таблицу связей вместо столбца CSV.

В то же время, вы можете использовать find_in_set, что-то вроде этого должно работать:

select u.*
from users u
join team t on find_in_set(u.id, t.members)
where t.id = 37

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

0 голосов
/ 02 февраля 2012

members - это текстовое поле, а id_users - int.Они бывают разных типов

0 голосов
/ 02 февраля 2012

Я не уверен, но я думаю, что ваш id_users может отличаться от members в team.members в тексте, но не int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...