powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MsSQL -> MySQL
15 сообщений из 15, страница 1 из 1
MsSQL -> MySQL
    #39419400
Добрый день.

Пишу программу для работы с ценами на сайте. В программе сделал табличку типа excel вида:
________________________________________
|...| PRODUCT_ID | Название товара | Ссылка |

Нужно заполнить данными с сайта, нужные данные хранятся в двух разных таблицах.
Из первой беру ID и Название и заполняю свою таблицу, получается что то типа:
_____________________
| 1 | 1901 | Телевизор... | |
| 2 | 9815 | Пальто........ | |
| 3 | 4194 | Холодильник | |

Во второй таблице в бд сайта нужные мне ссылки пронумерованы теми же ID, т.е. таблица вида
______________________
| PRODUCT_ID | Ссылка |

Но ссылки есть не у всех товаров, а у меньшей части.

Суть проблемы - ну вот делаю я селект к примеру:
Код: sql
1.
SELECT `LINK` FROM `bd`.`table1` WHERE `PRODUCT_ID`  IN ( 1901,9815,1904,6565,5455 )


Возвращаются ссылки. Но как их записать в мою таблицу? Куда? В какую ячейку?

Можно вместе с ссылками возвращать ID типа:

Код: sql
1.
SELECT `LINK`, `PRODUCT_ID` FROM


Но придется делать программную сортировку, я такую уже делал, правда совсем не оптимизированную и работала она секунд 30 для 4000 товаров. Проходим всю таблицу, ищем нужный ID, как нашли записываем ссылку. Цикл в цикле - тормоза...

Можно сделать отдельно для каждого товара запрос, но нагрузка будет большая на бд...

На одном форуме посоветовали отправлять в запросе xml таблицу с номерами ячеек и ID, джойнить эту таблицу с таблицей на сайте.

MsSQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @xml xml 
SET @xml='<rows><row id = 1>1901</row></rows>' 
SELECT Art.SortKey, T.Name, T.Enabled FROM 
   (
   select b.value('@id' , 'int') [SortKey], b.value('.' , 'varchar(50)') [ArtNo] from @xml.nodes('/rows/row') a(b) 
   )as Art 
LEFT JOIN 'bd'.'table1' AS T 
ON T.ArtNo = Art.ArtNo



Это работало быстро и я получал вместе с именем товара - отправленный мной номер ячейки. Дальше просто записывал по
этому номеру данные в ячейку своей таблицы. Но это MsSQL, а я перешел на MySQL, и вообще движок уже совсем другой на сайте. В общем тип БД поменять не предлагайте))

Пробовал этот код на мускуле - куча ошибок. DECLARE в мускуле работает совсем по другому, и кроме этого куча ошибок, которые поправить сам не могу - ибо нуб:) Помогите пожалуйста)
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419432
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
UPDATE new_table t1, old_link_table t2
SET t1.link = t2.link
WHERE t1.product_id = t2.product_id


1---Дмитрий--1На одном форуме посоветовали
Говнокод тебе посоветовали. Внеси "советчика" в чёрный список.
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419607
А такой код изменений не вносит в бд? Все работает в пределах одного запроса?
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419623
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1---Дмитрий--1А такой код изменений не вносит в бд?Такой вопрос по отношению к UPDATE-запросу видеть как минимум странно...
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419651
"Оператор UPDATE обновляет столбцы в соответствии с их новыми значениями в строках существующей таблицы. В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены. В выражении WHERE, если оно присутствует, задается, какие строки подлежат обновлению"

Базу модифицировать табу... По другому никак?
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419703
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1---Дмитрий--1Нужно заполнить данными с сайта
1---Дмитрий--1Базу модифицировать табу...
Может, подскажете, как Вы намерены заполнять таблицу данными, но при этом её не модифицировать?
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419846
Наверное я плохо задачу описал...

Я программирую на языке BlitzMax. Я пишу программу для управления ценами на сайте из программы.
Язык модульный, я использую модуль wxGUI для создания таблицы в программе. И модули для подключения к различным базам MySQL и MsSQL.

Вкратце суть: запускаю прогу - она создает пустую таблицу (интерфейс) по заданным мной параметрам, ширина строк столбцов, количество, цвет итд итп. Потом прога коннектится посредством TCP/IP к базе, с которой посредством запросов sql получает инфу и заполняет свою таблицу.

Представьте себе excel - моя прога это такая же таблица, только она может к бд коннектится и заполнятся из базы сайта.

Скрин прикрепляю. На скрине видно, что в таблице (в таблице моей программы) есть нумерация строк.
Обратится к ячейке, чтобы заполнить ее инфой - можно по номеру строки и столбца.

В бд (удаленная база сайта на mysql) нужные мне данные находятся в двух разных таблицах.
Первым запросом я получаю инфу: Название, цена, ID. Потом надо получить ссылки из другой таблицы в удаленной бд.

Проблема в заполнении локальной таблицы. Когда приходят данные по запросу я не знаю в какую ячейку мне их записать.
Если бы можно было отправить в своем запросе номера ячеек вместе с ID и получить ссылки вместе с теми же номерами ячеек - тогда не было бы проблем с заполнением локальной таблицы.

т.е я отправляю на сервер запрос "<Ячейка 1, ID 1904> <Ячейка 2, ID 8512>..."
а получаю ответ вида "<Ячейка 1, Ссылка http:ssdfsd.ru> <Ячейка 2, нет ссылки> <Ячейка 5, Ссылка http:tralivali.ru>"

Надеюсь подробно объяснил)
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419865
А еще круче было бы получить инфу сразу одним запрососм из двух таблиц. Из первой берет ID, название, цену, а из второй по ID берет ссылку...
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39419897
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1---Дмитрий--1получить инфу сразу одним запрососм из двух таблиц. Из первой берет ID, название, цену, а из второй по ID берет ссылку...Да легко...
Код: sql
1.
2.
3.
SELECT t1.Product_ID, t1.Name, t1.Price, t2.Link
FROM table1 AS t1, table2 AS t2
WHERE t1.Product_ID = t2.Product_ID
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420108
Akina спасибо тебе большое. Я вот эту тему курил на форумах очень долго и никто так и не подсказал самого очевидного решения - получать все что нужно в одном запросе...
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420128
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1---Дмитрий--1и никто так и не подсказал самого очевидного решенияНу это лишь потому, что вместо постановки исходной задачи и запроса советов по её решению кто-то начал строить своё решение (как выяснилось - не самое оптимальное) и просил советов по реализации одного из его этапов.
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420211
Akinaкто-то начал строить своё решение (как выяснилось - не самое оптимальное) и просил советов по реализации одного из его этапов.

Этот "кто-то" был я :D Так как нуб в sql - сразу предложил вариант передавать индексы в запрос
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420258
Эм.. проблема другая всплыла, я уже из трех таблиц данные получаю сразу

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT t1.ID, t1.NAME, t2.PRICE, t3.VALUE 
  FROM `bd`.`table1` AS t1, 
          `bd`.`table2` AS t2,
          `bd`.`table3` AS t3 
  WHERE 
          t1.BLOCK_ID=5 
              AND 
          t1.ACTIVE='Y' 
              AND 
          t1.ID = t2.PRODUCT_ID
              AND 
          t1.ID = t3.BLOCK_ELEMENT_ID AND t3.BLOCK_PROPERTY_ID = 134



и вот с третей таблицей косяк, в первых двух таблицах данные есть для всех товаров. Если прописать все условия без 3й таблицы - возвращаются все товары. А в третей таблице данные есть только у тех товаров к которым я прописал ссылки (я их к 2м товарам прописал). В итоге такой запрос вернет только два товара.

Можно сделать чтобы если t3.BLOCK_ELEMENT_ID не существует - то в t3.VALUE возвращался ноль (пустая строка "", т.к. строковое значение)?
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420276
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.ID, t1.NAME, t2.PRICE, t3.VALUE 
FROM      `bd`.`table1` AS t1
LEFT JOIN `bd`.`table2` AS t2  ON t1.ID = t2.PRODUCT_ID
LEFT JOIN `bd`.`table3` AS t3  ON t1.ID = t3.BLOCK_ELEMENT_ID 
                              AND t3.BLOCK_PROPERTY_ID = 134
WHERE t1.BLOCK_ID=5 
  AND t1.ACTIVE='Y' 
...
Рейтинг: 0 / 0
MsSQL -> MySQL
    #39420282
Спасибо еще раз. Все работает)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MsSQL -> MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]