Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   SQL запрос (работает, а вот поправить не могу).... (https://javascript.ru/forum/server/73630-sql-zapros-rabotaet-vot-popravit-ne-mogu.html)

Sergey999 01.05.2018 17:17

SQL запрос (работает, а вот поправить не могу)....
 
SELECT __people_person_list.* , __array_of_add_data.`act_date` AS `act_date` FROM __people_person_list INNER JOIN __array_of_add_data ON (__people_person_list.`id` = __array_of_add_data.`uid`) LIMIT 500


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


:help:

Белый шум 01.05.2018 18:40

Из такого описания сложно что-то понять, но могу предположить что вам надо заменить
INNER JOIN
на
LEFT JOIN

Sergey999 01.05.2018 19:01

Хм, даже не знаю как еще объяснить. Теперь результаты и правда есть. Если по структуре:

CREATE TABLE IF NOT EXISTS `__array_of_add_data` (
`id` int(11) NOT NULL,
  `uid` int(11) NOT NULL,
  `key_id` int(11) NOT NULL,
  `act_date` date NOT NULL,
  `int_val` int(11) DEFAULT NULL,
  `str_val` varchar(255) NOT NULL,
  `text_val` text NOT NULL,
  `attr_data` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `__people_person_list` (
`id` int(11) NOT NULL,
  `tag_name` varchar(255) NOT NULL,
  `full_name` varchar(200) NOT NULL,
  `date_of_birth` date NOT NULL DEFAULT '1000-01-01',
  `date_of_dead` date NOT NULL DEFAULT '1000-01-01',
  `country_code` varchar(5) NOT NULL,
  `city_of_birth` varchar(255) NOT NULL,
  `skill_point` int(11) NOT NULL,
  `biography` text
) ENGINE=InnoDB AUTO_INCREMENT=61943 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;


В итоге, я должен из второй таблицы выбрать все записи по одной штуке, и для каждого из них из __array_of_add_data при совпадении id и uid самое последнее значение act_date. При это во WHERE будет еще условие вида key_id IN (список подходящих id). Вот что нужно сделать на самом деле....

Sergey999 01.05.2018 20:12

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

laimas 02.05.2018 02:28

Используйте MAX и GROUP BY id.

__array_of_add_data.`act_date` AS `act_date` - тут алиас бессмыслен

Sergey999 02.05.2018 02:52

Цитата:

Сообщение от laimas (Сообщение 484482)
Используйте MAX и GROUP BY id.

__array_of_add_data.`act_date` AS `act_date` - тут алиас бессмыслен

Да верно, я уже понял это с GROUP BY немного, ну пока мне точно есть в каком смысле рассуждать....


Часовой пояс GMT +3, время: 00:25.