2013-04-22 2 views
3

У меня есть две таблицы SQL, одна для пользовательских таблиц и одна для всех вещей о пользователе. (Возраст, пол и т.д.)Какое SQL-соединение следует использовать здесь?

пользователя стол:

id, username, mail, etc 

вторая таблица

id, user_id, type_id, content 

содержимое таблицы пользователя:

1, knife, [email protected], etc ... 

второй таблице:

1, 1, 38 (age) 
1, 3, Male 

Я хотел бы получить пользователя, который находится между 20-40 лет и кто мужчина. Я сейчас здесь:

SELECT 
     * 
FROM 
     felhasznalok_kieg_adat 
     JOIN felhasznalok 
       ON felhasznalok_kieg_adat.user_id = felhasznalok.id 
WHERE 
    felhasznalok_kieg_adat.kieg_id = "22" 
    and felhasznalok_kieg_adat.tartalom < 21 
    and felhasznalok_kieg_adat.tartalom < 40 

Он показывает мне результаты в возрасте от 21 до 40 лет, но как я могу добавить, что мужчина или женщина вещь?

+1

Ваш второй вывод таблицы действительно странный, как в одном столбце могут содержаться как информация о сексе, так и возрасте? –

+0

yes correct @BojanKovacevic - ваши оба значения вставляются в один столбец? – NetStarter

+0

aha, теперь я вижу, что тип отличается и определяет, что означает контент. Но не лучше, если у вас есть столбцы пола и возраста? –

ответ

2

Вы должны присоединиться один раз для возрастного фильтра, а второй раз для пола фильтра.

SELECT User.* 
FROM User 
    JOIN UserContent ageFilter 
     ON ageFilter.user_id = User.id 
     AND ageFilter.type_id = 1 -- use type_id for joining 
    JOIN UserContent genderFilter 
     ON genderFilter.user_id = User.id 
     AND genderFilter.type_id = 3 
WHERE (ageFilter.content < 21 AND ageFilter.content < 40) -- what type is content? You have to make some sort of conversion here! 
AND (genderFilter.content = 'Male') 

Я заменил имя таблиц и столбцов тем, что вы описали в своем вопросе.
Добавить type_id в соединение, он станет намного более прозрачным таким образом.

+0

, вы должны поместить ключ, объясняющий, какие таблицы могут помочь OP –

+0

Я использую имя, которое он дает в своем вопросе. –

+0

Сначала я увидел ваше решение. Я попробовал это. Это действительно работает, но могу ли я получить это с идентификатором пользователя в столбце id. Это дает мне anythink, но для id он не дает мне идентификатор из таблицы пользователя, а некоторые другие ID. Мне не нужен идентификатор других таблиц. – user2301881

0
SELECT * 
    FROM felhasznalok_kieg_adat 
    JOIN felhasznalok ON felhasznalok_kieg_adat.user_id = felhasznalok.id 
WHERE ((felhasznalok_kieg_adat.kieg_id = "22" 
     AND felhasznalok_kieg_adat.tartalom < 21 
     AND felhasznalok_kieg_adat.tartalom < 40)) 
    AND felhasznalok_kieg_adat.gender = 'male' 
0

Выберите некоторые значения типа «М» для мужчин и «F» для женщин. Тогда:

ALTER TABLE felhasznalok_kieg_adat ADD COLUMN sex CHAR(1); 

И ваш выбор для мужчин только будет выглядеть следующим образом:

SELECT * 
FROM felhasznalok_kieg_adat 
JOIN felhasznalok 
ON felhasznalok_kieg_adat.user_id = felhasznalok.id 
WHERE ((felhasznalok_kieg_adat.kieg_id = "22" and felhasznalok_kieg_adat.tartalom < 21 and felhasznalok_kieg_adat.tartalom < 40)) and (sex = 'M') 
0

Если возможно, если вы не имеющие пол колонки вы должны добавить его в таблице

Вы можете использовать BETWEEN в ваш присоединиться вместо> и < и вы можете присоединиться к таблице, как

SELECT * 
FROM table1 
JOIN table2 
ON table1.user_id = table2.id 
WHERE ((table1.kieg_id = "22" and table1.tartalom BETWEEN 21 AND 22)) 


AND table1.gender = 'male' 
+1

Я сделал это так, потому что я делаю пользовательские таблицы dynmic. Я делаю регистрационную форму и пользовательскую форму динамической. Я могу изменить форму easyli с помощью этого решения. – user2301881

+0

ok @ user2301881 понял вашу точку – NetStarter

Смежные вопросы