Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.171.121] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Версия MySQL 5.6.32-78.0-log
Добрый день/вечер. Помогите пожалуйста конвертнуть запрос с MsSQL в MySQL. declare @xml xml SET @xml='<rows> <row id = "280">112</row> </rows>' SELECT Art.SortKey, T.title, T.price, T.activity FROM (select b.value('@id' , 'int') [SortKey], b.value('.' , 'varchar(50)') [ArtNo] from @xml.nodes('/rows/row') a(b) )as Art LEFT JOIN `tr`.`product` AS T ON T.id = Art.ArtNo Пробовал онлайн сервис sqlines, после его работы получил ошибку синтаксиса. |
Сообщ.
#2
,
|
|
|
MySQL не поддерживает тип данных XML. Прямое преобразование невозможно.
Можно импортировать XML в таблицу (возможно, временную), и затем работать с импортированными данными. Но надо как минимум гарантировать, что в структуре XML нет никаких выпендронов - импорт достаточно туп, и шуток не понимает. |
Сообщ.
#3
,
|
|
|
У меня в локальном приложении есть таблица (таблица не на sql, а таблица как в excel программная на wx_widgets) с id товаров, нужно с удаленной бд получить название товаров по id и поместить в таблицу.
Таблица типа: __________________ № | id | name | price | ---------------------- 1 |251 |???? |???? | ----------------------- 4 |5142 |???? |???? | ----------------------- Где № - номер ячейки, id - id товара. Если я просто пошлю запрос типа: SELECT name, price FROM 'bd' WHERE id IN(251, 5142, 547, 454, 444); То, бд вернет мне товары и мне придется делать программную сортировку, делать двойной вложенный цикл и сравнивать id из запроса и id в таблице, чтобы все это рассортировать. В итоге очень долгая сортировка получается... Когда в локальной таблице около 1000 ячеек и запрос вернул тысячу строк получается цикл 1000*1000... for j = 0 to 999 //Проходим по всей 1000 строк из запроса к бд... for i=0 to 999 //проходим для каждого запроса таблицу с нуля и сравниваем id из запроса и из таблицы, если равны то записываем товар в таблицу и exit if id[i]=id[j] then table[i]=Запрос[j] next next Тот запрос на MsSQL передавал в бд вместе с id товара мои номера ячеек из таблицы и запрос возвращал мне имена товара вместе с номером ячейки. В итоге мне не нужно было делать сортировку я сразу знал куда (в какую ячейку) записать результат. Возвращал так примерно: 1, Товар Апупенный, 5000р 2, Товар Хороший, 4500р И я просто записывал в свою таблицу table[Запрос1.1]=Запрос1.2 Где 1.1 возвращал мне номер ячейки, а 1.2 название товара... Можно так же на MySQL сделать подскажите пожалуйста? |
Сообщ.
#4
,
|
|
|
SELECT name, price FROM bd WHERE id IN (251, 5142, 547, 454, 444) ORDER BY FIELD(id, 251, 5142, 547, 454, 444); Записи вернутся в заданном в аргументе функции порядке. Вот только надо иметь гарантии, что все переданные ID присутствуют в таблице. |
Сообщ.
#5
,
|
|
|
Цитата Akina @ SELECT name, price FROM bd WHERE id IN (251, 5142, 547, 454, 444) ORDER BY FIELD(id, 251, 5142, 547, 454, 444); Этот запрос не вернет номера ячеек. Я просто не стал сильно вдаваться в подробности работы программы, но нужно именно вернуть номера ячеек, никак уж по другому нельзя... Нужно именно чтобы запрос вернул номера мои которые я в запросе передал, это очень важно. Без этого уж никак. Нужен именно аналог того запроса на MsSQL который передавал в xml номера ячеек. Нужно именно запрос типа: Я тебе даю номер и id - верни мне товар с этим id и тот номер что я тебе дал. |
Сообщ.
#6
,
|
|
|
Помогите кто-нибудь пожалуйста, кто MySQL хорошо знает?
|
Сообщ.
#7
,
|
|
|
Цитата Rzonex @ Нужно именно чтобы запрос вернул номера мои которые я в запросе передал Я тебя не понял... у меня же в запросе и есть принятый сервером и переданный клиентом список номеров. Причём именно в том порядке,в каком они передавались. И именно в этом порядке вернутся записи. Добавлено Цитата Rzonex @ Я тебе даю номер и id - верни мне товар с этим id и тот номер что я тебе дал. Ты эта... определись... вот твой пример: Цитата Rzonex @ Если я просто пошлю запрос типа: SELECT name, price FROM 'bd' WHERE id IN(251, 5142, 547, 454, 444); То, бд вернет мне товары Где тут номер? |
Сообщ.
#8
,
|
|
|
Цитата Akina @ Ты эта... определись... вот твой пример: Я писал, что это плохой пример. Я писал, что если просто так отправить то не получится. Нужно отправить номер ячейки к примеру 51 и id например 5021, а вернуло чтобы товар с этим id и номер 51. И так для всех id которые я пошлю. К примеру посылаю: № | id ------- 1 | 5124 2 | 4145 5 | 7841 12 | 7474 17 | 46654 а возвращает имя товара с этим id и тот номер ячейки который я передал в запрос № | Название -------- 1 | Драпуля 2 | Хренуля 5 | Фигуля 12 | итдитп 17 | фыва Akina можешь пример небольшой набросать как такое реализовать пожалуйста. |
Сообщ.
#9
,
|
|
|
Цитата Rzonex @ К примеру посылаю: № | id ------- 1 | 5124 2 | 4145 5 | 7841 12 | 7474 17 | 46654 а возвращает имя товара с этим id и тот номер ячейки который я передал в запрос SELECT name, price, id, ELT(FIELD(id, 5124, 4145, 7841, 7474, 46654), 1, 2, 5, 12, 17) cellnum FROM bd WHERE id IN (5124, 4145, 7841, 7474, 46654) ORDER BY FIELD(id, 5124, 4145, 7841, 7474, 46654); |
Сообщ.
#10
,
|
|
|
Akina
Спасибо большое! Все работает. С меня лайк Сортировка там по моему не нужна, пробовал без ORDER BY - работает так же, а мне в принципе все равно в каком порядке они придут. Такие конструкции не сильно бд нагружать будут? |