Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связанные таблицы 
V
    Опции темы
MoLeX
Дата 1.10.2010, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Есть две таблицы:
Код

CREATE TABLE IF NOT EXISTS `table1` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`tid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
INSERT INTO `table1` (`tid`) VALUES (1), (2);


CREATE TABLE IF NOT EXISTS `table2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_table1` int(11) NOT NULL,
  `lang` int(2) NOT NULL,
  `title` varchar(250) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `table2` (`id`, `id_table1`, `lang`, `title`) VALUES (1, 1, 1, 'Заголовок на Русском. 1'), (2, 1, 2, 'Title in English. 1'),
(3, 2, 1, 'Заголовок на Русском. 2');


Запросом:
Код

SELECT * FROM `table1` LEFT OUTER JOIN `table2` ON (`table1`.`tid` = `table2`.`id_table1` AND `table2`.`lang` = 1) WHERE `table1`.`tid` = 1

получаю данные:
tid | id | id_table1 | lang | title
 1  |  1 |     1          |   1   | Заголовок на Русском. 1

если изменю данные - `table2`.`lang` = 2 и `table1`.`tid` = 2, то получу null
tid |   id  | id_table1 | lang | title
 2  | null |     null      |  null  | null


а можно ли сделать финт ушами, при условии что нет второго языка получить данные первого?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Akina
Дата 1.10.2010, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Можно (этот ответ подходит к 99% вопросов, начинающихся с "А можно ли", причём независимо от содержания вопроса).

Простейший вариант - хранимка.

Более сложный - вместо 
Код

`table2`.`lang` = 1

сотворить нечто вроде
Код

`table2`.`lang` = (CASE WHEN 0=(select count(t.lang) from table2 t where t.lang=2) THEN 1 ELSE 2 END)

Есть ещё варианты...

Это сообщение отредактировал(а) Akina - 1.10.2010, 08:05


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 1.10.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



не смог понять структуру(точнее, необходимость именно в left outer join), потому задам встречный вопрос: возможно ли выбрать "на всех языках", отсортировать по значимости языка(я только запрос имею в виду: order by table2.lang, table1.tid) и выбрать первую запись(limit 1).
не будет русского - возьмется английский; не будет и английского - возьмется китайский.
PM MAIL   Вверх
Zloxa
Дата 5.10.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(MoLeX @  1.10.2010,  06:41 Найти цитируемый пост)
при условии что нет второго языка получить данные первого? 

А что должно происходить при отсутствии первого, второго, но наличии третьего, когда нам надо выбраться по второму?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
xoslv
Дата 13.10.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Цитата(Zloxa @ 5.10.2010,  19:17)
Цитата(MoLeX @  1.10.2010,  06:41 Найти цитируемый пост)
при условии что нет второго языка получить данные первого? 

А что должно происходить при отсутствии первого, второго, но наличии третьего, когда нам надо выбраться по второму?

core dumped sig 11  smile 
--------------------
Не всё то маздай, что синее!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.