powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Правильная работа с MySQL
22 сообщений из 97, страница 4 из 4
Правильная работа с MySQL
    #39738952
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Стало лучше. Поле в запросе итоговом уже есть. Но оно пока пустое, предполагаю, что там Null.

SELECT SC.*,TW.NAIM AS NTOW,TW.CENA_ZAK AS CENA_ZAK,VYD.KOLVYD FROM SCHETA SC ;
LEFT JOIN TOWAR TW ON SC.KODTOW=TW.KODTOW ;
LEFT JOIN (SELECT BB.KODTOW,SUM(BB.KOLVO) AS KOLVYD,AA.KODSCE FROM DOKUMNAK AA,NAKLAD BB GROUP BY BB.KODTOW,AA.KODSCE) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE WHERE SC.KODDOK=?M_KODSCE

Что не так? Естественно накладные есть и позиции в них тоже есть. Почему полученный подзапрос не возвращает количество?

Я бы с радостью почитал, о том как писать такие запросы, но даже не могу найти примера подобного.
Ваши примеры мне сильно помогают: с Left Join - уже нет проблем.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738961
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMaestroEv,

Счет один или много? Если один, как в примере выше 21734842 , то
Код: sql
1.
2.
3.
4.
5.
... LEFT JOIN (
      SELECT BB.KODTOW, SUM(BB.KOLVO) AS KOLVYD 
                 FROM DOKUMNAK AA join NAKLAD BB on AA.??? = BB.??? WHERE AA.KODSCE=M.KODDOK 
                 GROUP BY KODTOW
         ) ...



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

PS Читай книжки.

Спасибо. То есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?
Можно же внутри без Join? 18 лет в фоксе без джин обходился :(

... LEFT JOIN (SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW FROM DOKUMNAK AA,NAKLAD BB GROUP BY KODTOW WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK) VYD ON SC.KODTOW = VYD.KODTOW WHERE SC.KODDOK=?M_KODSCE...
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738963
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы код форматировал прежде чем сюда постить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT SC.*,TW.NAIM AS NTOW,TW.CENA_ZAK AS CENA_ZAK,VYD.KOLVYD 
    FROM SCHETA SC
       LEFT JOIN TOWAR TW ON SC.KODTOW=TW.KODTOW ;
       LEFT JOIN (SELECT BB.KODTOW,SUM(BB.KOLVO) AS KOLVYD,AA.KODSCE 
                        FROM DOKUMNAK AA,NAKLAD BB 
                        GROUP BY BB.KODTOW,AA.KODSCE
             ) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE 
    WHERE SC.KODDOK=?M_KODSCE


В выделенной строке join надо.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738969
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvМожно же внутри без Join? 18 лет в фоксе без джин обходился :(
Можно, но не нужно. Читать такой запрос неудобно. С join понятно где условие связи таблиц, а где условия отбора. Если все упихать во where то получается каша, особенно если таблиц намного больше двух. Лучше привыкай к join. Фокс join тоже понимает.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738976
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvТо есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?
Да, подселект можно запустить без внешнего, если не используются поля внешнего.

Код: sql
1.
2.
3.
4.
SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW 
          FROM DOKUMNAK AA,NAKLAD BB 
          WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK
          GROUP BY KODTOW 


Сначала пишется WHERE а потом GROUP BY.
Фокс такое пропустит, а MySQL ругнется. В остальном вроде правильно.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738978
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMaestroEvМожно же внутри без Join? 18 лет в фоксе без джин обходился :(
Можно, но не нужно. Читать такой запрос неудобно. С join понятно где условие связи таблиц, а где условия отбора. Если все упихать во where то получается каша, особенно если таблиц намного больше двух. Лучше привыкай к join. Фокс join тоже понимает.

Согласен. Так удобнее читать. Теперь уже в MySQL придется все писать как надо.

Дает ошибку. Что не так? Без Where в подзапросе - виснет насмерть.

...LEFT JOIN (SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW,AA.KODSCE FROM DOKUMNAK AA JOIN NAKLAD BB ON AA.KOD=BB.KODDOK GROUP BY BB.KODTOW,AA.KODSCE WHERE AA.KODSCE=?M_KODSCE) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE WHERE SC.KODDOK=?M_KODSCE...
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39738997
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMaestroEvТо есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?
Да, подселект можно запустить без внешнего, если не используются поля внешнего.

Код: sql
1.
2.
3.
4.
SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW 
          FROM DOKUMNAK AA,NAKLAD BB 
          WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK
          GROUP BY KODTOW 


Сначала пишется WHERE а потом GROUP BY.
Фокс такое пропустит, а MySQL ругнется. В остальном вроде правильно.

Огромное спасибо. Значит справлюсь. Отдельно протестирую подселект.
А вообще в подселекте в итоговом селекте использовать поля внешнего можно?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39739069
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvА вообще в подселекте в итоговом селекте использовать поля внешнего можно?
Можно, но нежелательно. В этом случае для каждой записи внешнего запроса будет выполнен отдельный подзапрос.
Т.е. подзапрос отработает много раз и в результате получим тормоз.
Хотя возможно оптимизатор найдет более удачный план выполнения запроса и тормозов не будет.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39743968
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Очередной вопрос. Они усложняются. :)

Таблица Naklad ссылается полем kodsce на таблицу Schet в которой есть поле kodkli - ссылка на таблицу Klient.

Мне надо выбрать накладные и в них показать имя клиента, ссылка на которого есть только в счете.
Пример такого синтаксиса покажите, плиз?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39743976
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select k.name
from Naklad  n inner join
Schet s on n.kodsce =s.id inner join
Klient k on s.kodkli = k.id


Прочтите что нибудь на эту тему
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39757603
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С новым годом! Приветствую всех.

Еще один вид селектов используемых мной в Фоксе не могу перевести на язык MySql.
Надо определить если ли заказ этого товара в этот день?
То есть выбрать записи из таблицы-шапки(DOKUMZAP и таблицы-позиции(ZAP) те, у которых в шапке дата нужная, а позициях есть товар нужный.

Делал на Фоксе так:
*********************
PARAMETERS M.SYSDAT,M.KODTOW
********************
SELECT AA.KOD,AA.NOMER,AA.DATA,BB.KOLVO,BB.CENA,BB.KODTOW,AA.DOPOL FROM DOKUMZAP AA,ZAK BB ;
WHERE AA.DATA=M.SYSDAT AND AA.KOD=BB.KODDOK AND BB.KODTOW=M.KODTOW INTO CURS ExistZAP
********************
Понимаю, что надо делать Join, но как бы какую вязать к какой Шапку к позициям или позиции к шапке?
Нет уверенности. Помогите.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39757605
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же это уже писал 21714529

Тут обычный join
Код: sql
1.
2.
3.
SELECT AA.KOD,AA.NOMER,AA.DATA,BB.KOLVO,BB.CENA,BB.KODTOW,AA.DOPOL ;
    FROM DOKUMZAP AA join ZAK BB on AA.KOD=BB.KODDOK;
    WHERE AA.DATA=M.SYSDAT AND BB.KODTOW=M.KODTOW
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39757616
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. То есть в JOIN нет особой разницы какую таблицу к какой вязать?
Это я себе лишнего накрутил?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39757617
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvСпасибо. То есть в JOIN нет особой разницы какую таблицу к какой вязать?
Если речь о том что "AA join BB" или "BB join AA", то без разницы. Оба варианта равнозначны.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39792043
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую.
Как получить доп поля заданного размера в SELECT?

Select 00 as SOST,000.00 as PROC ...
в Фоксе - получим поле числовое SOST длиной 2 и числовое поле PROC длиной 6 с дробной частью 2 .

Как это сделать в MySql ?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39792048
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,
а что, синтаксис MySQL лучше всего знают фоксовики? Может таки в профильном форуме спросить?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39792052
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CAST(Value as Type)

Код: sql
1.
Select cast(0 as int) as SOST ...



В фоксе тоже работает
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39802450
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Стал разбираться с вопросом экранирования.

C программы надо отправить данные с записи на Фоксе в MySQL
В проге есть уникальные Коды 16тиричные полученные Gen_id() ..
В кодах могут быть любые символы. :(

В фоксе было insert from memvar и Gather и не надо было думать об экранировании.

Теперь надо как-то их засунуть в MySql
Есть модуль - который генерит строку на синтаксисе MySql.

Типа Insert into basa () values () .
Тут нужно указывать значения переменных явно, как то экранируя кавычки и управляющие символы..

Как быть?
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39802453
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуглить не пробовал? экранирование кавычек mysql
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39802455
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты же уже решил эту проблему полгода назад 21725055 .
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39805595
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТы же уже решил эту проблему полгода назад 21725055 .

Думал, что решил..

M.str = STRTRAN(M.str, CHR(0), '\x00')
M.str = STRTRAN(M.str, CHR(26), '\x1A')

вот это не работает.. в коды вставляются эти \X00 как есть.
Кавычки отрабатываются верно. Пока убрал эти строки совсем, но сомнения остались.
...
Рейтинг: 0 / 0
Правильная работа с MySQL
    #39805634
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvDima TТы же уже решил эту проблему полгода назад 21725055 .

Думал, что решил..

M.str = STRTRAN(M.str, CHR(0), '\x00')
M.str = STRTRAN(M.str, CHR(26), '\x1A')

вот это не работает.. в коды вставляются эти \X00 как есть. А с чего бы им работать? Документацию по поводу правильного способа задания значения 16-ричным кодом не пробовали посмотреть? Да хотя бы в командном окне
Код: sql
1.
? '\x00'


не пробовали? Вы откуда такую нотацию взяли? Чем вам Chr(0) и Chr(10) не понравились? Тем более, что во втором аргументе STRTRAN() они вроде как пригодились, а в третьем уже всё, не катят?
А зачем в первой строке CHR(0) меняется на самого же себя? Или для вас CHR(0) и то, что вы пытались закодировать через '\x00', не одно и то же?
...
Рейтинг: 0 / 0
22 сообщений из 97, страница 4 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Правильная работа с MySQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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