2010-09-08 4 views
1

Я пытаюсь создать динамическое свойство в используемой структуре, и у меня есть некоторые трудности. У меня есть две таблицы, соединенные во многих отношениях (платформы, заголовки , и игры) игры имеет две основные клавиши, titleid и platformidЧтение составного ключа в mysql

select * from games where CONCAT(platformid,titleid) = 110 

110 является только примером, но запись существует с платформой 1 и titleid 10 ...

почему обыкновение та работа?

PS: Я знаю, что могу переписать запрос с где положение (platformid = 1 и заголовок = 10), но для целей моей структуры, это не вариант ...

EDIT: Fixed genreid ошибка (должна была titleid, но в моем фактическом коде это было правильно ...)

EDIT 2: Это сценарий:

select * where="platforms.id=#game.platformId# AND genres.id=#game.genreId# AND games.id<>#game.id#" 

Это сценарий, когда я хочу, чтобы найти записи ДРУГИЕ чем тот, который выбран в настоящее время ...

+1

Вы уверены, что вам нужно genreid и не titleid? Я спрашиваю, потому что ваш вопрос делает это немного расплывчатым. – Petros

+0

Добавлена ​​коррекция, спасибо! И сценарий ниже ... select * where = "platforms.id = # game.platformId # И genres.id = # game.genreId # И games.id <> # game.id #" - это ситуация где я хочу выбрать что-то, что соответствует критериям платформы и жанра, за исключением текущей выбранной записи ... – Mohamad

ответ

4

Во-первых, таблица не может иметь два PRIMARY KEY s. Вероятно, вы имеете в виду составной ключ.

Во-вторых, ваш запрос будет работать, но также будет соответствовать (platformid, genreid) = (11, 0).

Вы можете использовать кортеж сравнения синтаксиса (конечно, если ваша база позволит вам это сделать):

SELECT * 
FROM games 
WHERE (platformid, genreid) = (1, 10) 

или сделать более сложную конкатенацию:

SELECT * 
FROM games 
WHERE CONCAT_WS(',', platformid, genreid) = '1,10' 
+0

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

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