Сегодня коснусь SQL запроса.
Очень часто необходимо взять данные с двух табл., которые имеют один(минимум) общий столбец с одинаковыми значениями(это условие Обязательно).
Цель:
Сделать запрос, который выберет название товаров и артикулов из 2-х разных таблиц согласно названия города и категории , в которых совпадает sku(id) товаров.
Очень часто необходимо взять данные с двух табл., которые имеют один(минимум) общий столбец с одинаковыми значениями(это условие Обязательно).
Цель:
Сделать запрос, который выберет название товаров и артикулов из 2-х разных таблиц согласно названия города и категории , в которых совпадает sku(id) товаров.
4. Запрос и результат:
Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).
Внимание(важная часть запроса, без которой он просто бесполезен):
#Sql, #MySql
SELECT olx_sales_week_by_wh.sku,products.articul,products.name
FROM olx_sales_week_by_wh
LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
WHERE olx_sales_week_by_wh.name ='Львов'
AND products.category = 'кдх2б' GROUP BY olx_sales_week_by_wh.sku
Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).
Внимание(важная часть запроса, без которой он просто бесполезен):
LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
#Sql, #MySql
Хочу сегодня добавить несколько сниппетов по LINQ запросам:
1. Поиск текста по регулярке, множество совпадений в список:
2. Создать список ID(индексы строк), в которых содержатся необходимый ключ(особенность: создание анонимного типа с свойствами(Index и Value)):
3. Получение суммы из списка, которые имеет тип данных string(List<string>) т.е. необходимо значения string сконвертировать в int:
4. Создание Dictionary<string,string> из двух разных Списков(List<string>):
5. Создание списка из двух списков, в которых значения не совпадают(т.е. в одном списке, есть в другом нет и те значения, которых нет в другом списке добавляем в новый третий список):
Получается новый список "compR_GBD" состоящий из этих двух значений(
#LINQ , #CSharp
1. Поиск текста по регулярке, множество совпадений в список:
Regex regexJson = new Regex(@"[a-zA-Z0-9]{20,}.*?}");
List<string> tmpList = regexJson.Matches(result).Cast<Match>().Select(m => m.Value).ToList();
List<string> resultsList = tmpList.Where(s => s.Contains("index") && s.Contains("id") && s.Contains("brandId") && !s.Contains("Отзывы") && !s.Contains("advert")).ToList();
2. Создать список ID(индексы строк), в которых содержатся необходимый ключ(особенность: создание анонимного типа с свойствами(Index и Value)):
tmpList.Select((v, i) => new { Index = i, Value = v })
.Where(p => p.Value.Contains("brandId")).Select(p => p.Index.ToString()).ToList();
3. Получение суммы из списка, которые имеет тип данных string(List<string>) т.е. необходимо значения string сконвертировать в int:
var sumTempResList = tmpResList.Where(d => !string.IsNullOrEmpty(d.Trim())).Select(s => int.Parse(s.Replace("-",""))).ToList().Sum();
4. Создание Dictionary<string,string> из двух разных Списков(List<string>):
List<string> keysList = new List<string>{"2569746", "9876415", "6957459"};
List<string> valuesList = new List<string>{"val1", "val2", "val3"};
Dictionary<string,string> resDict = keysList.Zip(valuesList, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v);
5. Создание списка из двух списков, в которых значения не совпадают(т.е. в одном списке, есть в другом нет и те значения, которых нет в другом списке добавляем в новый третий список):
List<string> artsG = new List<string>{"2569746", "9876415", "6957459", "5947945", "9874647"};
List<string> skues = new List<string>{"2569746", "9876415", "6957459"};
List<string> compR_GBD = artsG.Where(n => !skues.Any(s => s.ToLower() == n.ToLower())).ToList();
Получается новый список "compR_GBD" состоящий из этих двух значений(
"5947945", "9874647"
)#LINQ , #CSharp
Хочу показать пример SQL запроса, который пришлось использовать.
Цель:
Сделать запрос, который покажет ежедневные суммы расходов на рекламу за "текущий" и "прошлый" месяц, для определенной категории товара.
Цель:
Сделать запрос, который покажет ежедневные суммы расходов на рекламу за "текущий" и "прошлый" месяц, для определенной категории товара.
SELECT date, ROUND(sum(spend),2) spend
FROM `reklama` WHERE category = 'одеяла' AND (MONTH(date) = MONTH(CURRENT_DATE()) OR MONTH(date) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH))
GROUP BY date
ORDER BY date ASC
В этом запросе играет ключевую роль, функция
MONTH()
- предназначена для того, чтобы извлекать месяц из даты, как раз то, что нам необходимо. И конечно, помним о том, чтобы увидеть все даты, необходимо сделать группировку
GROUP BY date,
без этой функции просто будет показана одна дата(одна строка).#Sql, #MySql
Есть хорошая программа для просмотра данных в Б.Д. heidisql и хочется использовать её для работы с локальной базой к примеру: (localdb)\MSSQLLocalDB используя SQL Server.
Но, просто подключиться к ней, не так уж и просто, для этого необходимо сделать ряд действий:
1. Узнаём куда подключаемся:
Но, просто подключиться к ней, не так уж и просто, для этого необходимо сделать ряд действий:
1. Узнаём куда подключаемся:
3. Вопрос. Как получить правильный адрес хоста, чтобы подключиться к Б.Д.?
а). Запускаем "cmd"
б). Вбиваем:
где: sqllocaldb - база
s - старт сервера(обязательно)
в). Вбиваем:
выводятся ряд строк, но необходима только одна:
Вот это и есть адрес хоста, к которому необходимо подключиться.
#Sql, #MySql
а). Запускаем "cmd"
б). Вбиваем:
sqllocaldb s
где: sqllocaldb - база
s - старт сервера(обязательно)
в). Вбиваем:
sqllocaldb i MSSQLLocalDB
выводятся ряд строк, но необходима только одна:
Имя канала экземпляра: np:\\.\pipe\LOCALDB#F8B4165B\tsql\query
Вот это и есть адрес хоста, к которому необходимо подключиться.
#Sql, #MySql
string about = string.Empty;
try
{
1. Делаем проверку на наличия необходимо тега с необходимым содержанием. Если, этого тега нет - то, будет Исключение и Пропуск.
about = ZennoPoster.Parser.ParseByXpath(tab.DomText, "//div", "innerHtml").ToList().Where(s => s == "About").First();
2. Проходим по всем блокам тега 'div', чтобы получить атрибуты outerHtml и innerHtml.
foreach (string about_ in ZennoPoster.Parser.ParseByXpath(tab.DomText, "//div", "outerHtml").ToList())
{
try
{
3. Получаем необходимый блок тега 'div' с innerHtml == "About".
about = ZennoPoster.Parser.ParseByXpath(about_, "//div", "innerHtml").ToList().Where(s => s == "About").First();
4. Получаем необходимый блок тега 'div' , только с outerHtml к примеру:
"<div class="biGQs _P fiohW tyUdl uuBRH">About</div>"
(может быть любой другой, у нас нет жёсткой привязки, к атрибуту outerHtml)
about = ZennoPoster.Parser.ParseByXpath(about_, "//div", "outerHtml").ToList().Where(s => s.Contains(">About<")).First();
5. Т.к. необходимый Текст находится в необходимо блоке тега 'span', то его можно получить благодаря регулярному выражению, где Первая Часть регулярного выражения, это Содержания тега 'outerHtml'
about = Regex.Match(tab.DomText, about + ".*?</span>").Value;
6. Чистим от мусора.
about = about.Replace(">About<", "><");
about = Regex.Replace(about, "<.*?>", "");
}catch
{
//
}
}
}catch
{
//
}
Сам код:
#zennoposter, #парсинг
string about = string.Empty;
try
{
about = ZennoPoster.Parser.ParseByXpath(tab.DomText, "//div", "innerHtml").ToList().Where(s => s == "About").First();
foreach (string about_ in ZennoPoster.Parser.ParseByXpath(tab.DomText, "//div", "outerHtml").ToList())
{
try
{
about = ZennoPoster.Parser.ParseByXpath(about_, "//div", "innerHtml").ToList().Where(s => s == "About").First();
about = ZennoPoster.Parser.ParseByXpath(about_, "//div", "outerHtml").ToList().Where(s => s.Contains(">About<")).First();
about = Regex.Match(tab.DomText, about + ".*?</span>").Value;
about = about.Replace(">About<", "><");
about = Regex.Replace(about, "<.*?>", "");
}catch
{
//
}
}
}catch
{
//
}
#zennoposter, #парсинг
Многие из вас уже знакомы с chatgpt. Не так давно, необходимо было реализовать задачу, по распознаванию фото Локально.
Работаем через API.
1.) Обращаемся к официальной документации по ссылке:
https://platform.openai.com/docs/api-reference/chat/create
( create chat completion )
2.) Выбираем необходимое меню(как на картинке).
3.) Копируем и корректируем код(т.к. там, только через URL, распознаётся фото), нам же надо, если фото находится локально.
Пример моего Кода(Будьте очень Внимательны при его Использование):
4.) Получаем результат и радуемся.
P.S. Внимание!! Распознавание через API в разы хуже, чем через WEB.
#chatgpt, #Csharp, #zennoposter
Работаем через API.
1.) Обращаемся к официальной документации по ссылке:
https://platform.openai.com/docs/api-reference/chat/create
( create chat completion )
2.) Выбираем необходимое меню(как на картинке).
3.) Копируем и корректируем код(т.к. там, только через URL, распознаётся фото), нам же надо, если фото находится локально.
Пример моего Кода(Будьте очень Внимательны при его Использование):
string access_token_chatGpt = project.Variables["access_token_chatGpt"].Value;
//СТАРТ. Чтение файла в котором находится задание для ChatGPT
string pathToFileTaskForDescreptionPicture = project.Variables["pathToFileTaskForDescreptionPicture"].Value;
var taskForDescreptionPicture = string.Join(Environment.NewLine, File.ReadAllLines(pathToFileTaskForDescreptionPicture).ToList().Where(s => !string.IsNullOrEmpty(s)).ToList());
//ФИНИШ.
project.Variables["descreption"].Value = string.Empty;
string url = "https://api.openai.com/v1/chat/completions";
string imagePath = project.Variables["imageFilepath"].Value;
string image_url = imagePath;
string taskFrom = string.Empty;
base64Image = string.Empty;
/*Конвертация локального фото в
необходимую строку для распознавания, вместо адреса URL*/
string base64Image = Convert.ToBase64String(File.ReadAllBytes(imagePath));
image_url = $"data:image/jpeg;base64,{base64Image}";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token_chatGpt);
client.DefaultRequestHeaders.Host = "api.openai.com";
var requestData = new
{
model = "gpt-4o",
messages = new []
{
new
{
role = "user",
content = new object[]
{
new
{
type = "text", text = taskForDescreptionPicture,
},
new
{
type = "image_url",
image_url = new
{
url = image_url,
detail = "high"
}
}
}
}
},
max_tokens = 500
};
string jsonRequest = JsonConvert.SerializeObject(requestData);
var content = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync(url, content).Result;
string responseData = response.Content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode)
{
project.Variables["descreption"].Value = responseData;
}
else
{
project.Variables["batch"].Value = responseData;
throw new Exception("");
}
4.) Получаем результат и радуемся.
P.S. Внимание!! Распознавание через API в разы хуже, чем через WEB.
#chatgpt, #Csharp, #zennoposter
Часто бывает, что есть ключевые слова, которые должны присутствовать в строке, которую анализируем.
Использую такое решение.
1.) Создаю список с "ключевыми словами"
2.) Список(результат) в котором содержатся строки, в которых есть необходимы ключи.
3.) Список(входные данные) строк, которые необходимо Проверить
3.) Основная логика.
#LINQ , #CSharp
Использую такое решение.
1.) Создаю список с "ключевыми словами"
List<string> socialUrls = new List<string>()
{
"youtube.com", "facebook.com", "x.com", "tiktok.com", "onlyfans.com"
};
string url = string.Empty;
2.) Список(результат) в котором содержатся строки, в которых есть необходимы ключи.
List<string> sringWithKeys = new List<string>();
3.) Список(входные данные) строк, которые необходимо Проверить
List<string> valuesOfInnerHtml= project.Lists["valuesOfInnerHtml"].ToList();
3.) Основная логика.
for(int x = 0; x < valuesOfInnerHtml.Count; x++ )
{
url = valuesOfInnerHtml[x];
try
{
url = tab.URL.Replace("&", "&");
// LINQ запрос для проверки ключа в строке из списка
if (socialUrls.Any(url.Contains)) sringsWithKeys .Add(url);
}catch
{
throw new Exception("mistake");
}
}
if (sringsWithKeys .Count == 0) throw new Exception("list is empty");
#LINQ , #CSharp