Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Набор ПО для создания, редактирования, получения в

У меня есть база данных синонимов, состоящая из 2х таблиц:
Таблица words:
id (int)
word (text)


Таблица synonyms:
id (int)
word1_id (int)
word2_id (int)


Несколько уточнений:
1. В таблице synonyms поля word1_id и word2_id - это id записей из таблицы words. Уточню, что оптимальность данного представления базы спорная, однако сейчас это просто пример.
2. В таблице синонимов не может быть двух записей, в которых повторяются id обоих слов одновременно (по крайней мере в одном и том же порядке).

Хочется иметь набор программного обеспечения (без самостоятельной разработки), который позволит:
1. Быстро проектировать структуру подобной базы (уже нашел - WorkBench в виде EER диаграммы);
2. Когда база будет создана (она будет расположена на удаленном сервере), легко сгенерировать форму для добавления в базу новых записей, в частности пар синонимов. При этом если добавляемые синонимы не существуют в базе слов чтобы они автоматически в нее добавлялись. И соответственно с минимумом телодвижений иметь возможность для добавления синонимов через эту форму.
3. В один клик получать выборку синонимов для нужного слова.

В Workbench последние два пункта не нашел как делать быстро (и без написания каждый раз запросов).

Посоветуйте как ПО, позволяющие решить поставленные задачи. Очень желательно, чтобы это ПО было именно для базы Mysql.
Ответ:
Для меня веб проще ... последние 11 лет только для веб и пишу ... видимо дело вкуса и опыта ...

Этот ответ добавлен с нового Винграда - 
Вопрос: Программа для доступа к БД (Поиск, создание, редактирование записей)

Коллеги, доброго дня!

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

Давать доступ через PHPMyAdmin или программу типа Navicat - не вариант - навороченный интерфейс для "обычных" пользователей. Нужно что-то проще. Хочется простой и удобный интерфейс для поиска нужной записи, её редактирования или добавления новой. Более ничего.

Понятно, что можно самостоятельно сделать пользовательский web-интерфейс, показать только нужные поля и дать соответствующие права. Но может быть уже есть готовые решения для данной задачи?

Если нет, будем "писать" сами)

Заранее большое спасибо за советы!
Ответ:
Dimitry Sibiryakov
Да, ещё 20 лет назад появилась как раз такая софтинка с названием Delphi. Всё перечисленное в ней делается мышкой прямо из коробки.

Dimitry Sibiryakov, ого, а вот это уже интересно) Вспоминаю простые формы из уроков программирования в институте.
А это примерно выглядит не так как на этом видео с 4 мин 24 сек?

Вопрос: Можно ли корректировать таблицу MySQL из C++ Builder через компонент TADOTable набора dbGo

У меня Windows XP и 7, MySQL 5.5.25 Win32, mysql-connector-odbe-5-1-6. Rad Studio C++ Builder 2010, База из дюжины таблиц.
Связь с базой через компонент TADOConnection из набора dbGo, для получения данных использую компоненты TADOQuery, в параметре SQL которого помещаю запрос, комбинирующий данные нескольких таблиц базы, и компонент TDateSource из набора Data Access. Все ОК. Для формирования новых записей и корректировки старых пытаюсь использовать компонент TADOTable из того же набора dbGo, в котором создаю необходимые lookup поля и TDateSource. Не могу понять, почему в одном модуле программы корректировка по схеме
BooksModule->ContractTbl->Active = true;
if (BooksModule->ContractTbl->Locate("ContractKey",
ObjectKey, SearchOptions))
{
BooksModule->ContractTbl->Edit();
BooksModule->ContractTblVolume->Value +=
BooksModule->ContentTblVolume->Value;
BooksModule->ContractTblItems->Value += 1;
BooksModule->ContractTbl->Post();
}

выполняется однократно после создания записи таблицы Content без замечаний, тогда как в другом модуле той же программы и с той же таблицей ContractTbl, но в цикле по всем записям таблицы Content, даже если между строками EDIT и POST убрать обе строки корректировки, в строке POST возникает ошибка типа "Не могу определить нужную строку, так как в некоторые поля внесены изменения". Но ведь состояние EDIT и предназначено для изменения некоторых полей. При работе той же программы на базе Paradox 9 использовались только BDE и компоненты TTable и таких проблем не возникало. При создании новой записи MySQL в той же таблице Content через состояние Insert компонента TADOTable проблем также не возникало. Очень не хочется писать SQL выражения для каждой корректировки таблиц базы.
Мои вопросы:
1. Можно ли корректировать строки MySQL таблицы изменяя данные TADOTable, установленной в состояние EDIT, в полях найденной строки, принадлежащих основной таблице (свойство TablName компонента), при этом Lookup поля изменениями не затрагиваются. Или для корректировки можно использовать только SQL выражения Update для компонента TADOQuery.
2. Если можно, то с какими ограничениями?
Ответ: Спасибо. Разобрался в тонкостях. Все работает. Могу написать детальные рекомендации.
Вопрос: Создание нового пользователя для доступа к БД

Добрый день,

Посоветуйте, пожалуйста, источник на русском языке, в котором содержится исчерпывающая информация по созданию/редактированию пользователей/ролей на сервере/БД.

Цель: Мне необходимо создать отдельного пользователя, через которого к БД будет подключаться web-клиент. При этом у этого пользователя должны быть права только на запуск определенных процедур и все. Может у кого есть готовый порядок действий при такой потребности.
Ответ: makar182,

логин создается командой CREATE LOGIN. Это сущность уровня сервера, собственно имя+пароль, используемое для подключения к серверу (может использоваться виндовое имя пользователя).

пользователь создается командой CREATE USER. Это сущность уровня конкретной базы, которой, собственно, выдаются права на действия c объектами этой базы.

Для логина задается связь с пользователем в каждой базе (если связи нет, то и прав на эту базу никаких нет).
Вопрос: Вот мой код, он выводит из БД данные. Но ума не приложу как реализовать редактирование и удаление

Помогите реализовать обновление редактирование и удаление из выборки БД.
Вот мой код, он выводит из БД данные. Но ума не приложу как реализовать редактирование и удаление.
моя почта на всякий случай:rakegent@mail.ru

PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>mtu</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="styles/main.css" />
    
</head>
<body>
<?php
include ("start.php");   // подключение блока где реализуется подключение к БД
$strSQL = "SELECT * FROM jiteli ORDER BY fio";  // SQL-запрос
$rs = mysql_query($strSQL); // Выполнить запрос (набор данных $rs содержит результат)                      
$table = "<table border=1 width = '600px' align=center>";
$k=1;
while($row = mysql_fetch_array($rs)) {                   //цикл
if($k%2==0) $color="#FFFFFF";else $color="#C0C0C0"; 
$k++;
$table .= "<tr BGCOLOR='$color'>";
 $table .= "<td >".$row['fio']."</td>";
 $table .= "<td >".$row['propiska']."</td>";
 $table .= "<td >".$row['step_rods']."</td>";
$table .= "<td >".$row['god_rojd']."</td>";
$table .= "<td >".$row['adres']."</td>";
$table .= "<td >".$row['pasport']."</td>";
$table .= "<td >".$row['ploshad']."</td>";
$table .= "<td >".$row['soc_pol']."</td>";
$table .= "<td >".$row['rab_vuz_shk']."</td>";
$table .= "<td >".$row['tel']."</td>";
$table .= "<td >".$row['kvartal']."</td>";
$table .= "<td >".$row['coment']."</td>";
 $table .= "</tr>";
      }
$table .= "</table>";
        echo $table;           // выводится
mysql_close(); // Закрыть соединение с БД
?>
 
</body>
</html>
Ответ:
Сообщение от Бактыбек
Не ругайте сильно меня пож. но я этот код в инете нашел чуток подправил, ни мог ли бы примерчик написать если не лень, просто ума не приложу, может не с того место делаю, очень нужна спасибо
Ругать не будут - я здесь не для этого. Если честно, то лень)

Поищите примеры, начните с редактирования/удаления одной записи без циклов - когда осознаете, что понимаете используйте цикл для вывода из mysql_fetch_array.
Вопрос: Категории с их уникальными наборами параметров

Добрый день.

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

Наперед скажу, что есть некоторые идеи реализации, но очень хочу услышать мнения и советы опытных разработчиков.

Постановка задачи

Вебсистема. Предусмотрена возможность создания пользователем товаров, принадлежащего к некоторой из категорий. К примеру, "Пластиковые окна", "Автомобильные шины", "Вазоны", "Канцтовары", "Шариковые ручки" и т.д. Тематика категорий может быть абсолютно различной и не пересекающейся с тематиками других категорий, а может и быть вложенной в родительскую категорию (как в случае с категориями "Шариковые ручки" и "Канцтовары").

Каждая категория может иметь свой уникальный перечень параметров/свойств с их численными и/или количественными данными от 1 до n штук на каждый параметр/свойство. Создавая товар и назначая ему одну из возможных категорий, пользователь сразу получает определенный перечень свойств/параметров данной категории, которые ему (пользователю) следует заполнить данными (своими уникальными по личному усмотрению, или выбрав один/несколько вариантов для данного параметра из предложенных)


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

Категория товара: Пластиковые окна
Тип: наружные
Материал: дерево | пластик | алюминий | металлопластик
Вид стекла: солнцезащитное
Форма: прямоугольное
Количество стекол: 3
Способ открывания: откидное | отвесное | раздвижное | складное | поворотное
Форточка: нет
Назначение: шумозащитное | изоляционное
Высота: 130 см
Ширина: 60 см

как видим, в данной категории есть 8 параметров/свойств и во 2-м, 6-м и 8-м указаны сразу несколько значений (разделены знаком |).

А для второго товара в этой же категории, пользователь может указать такие параметры:

Категория товара: Пластиковые окна
Тип: наружные
Материал: дерево | металлопластик
Вид стекла: солнцезащитное
Форма: квадратное
Количество стекол: 2
Способ открывания: откидное | складное | поворотное
Форточка: нет
Назначение: шумозащитное
Высота: 100 см
Ширина: 40 см

Для примера добавим товар в категорию "Пластилин"

Категория: Пластилин
Тип: традиционный
Возрастная группа: от 3 до 5
Цветов в наборе: 10
Специфика: с блестками | не засыхающий | перламутровый
Упаковка: картонная
Размеры: 35/8/4 см

Что общего и что отличается

Для окон параметр "Материал" пользователь может выбрать несколько предложенных ему вариантов, но сам вводить текстом новый параметр не может - только выбрать одно/несколько значений для данного параметра. Это же можно сказать и опараметрах "Способ открывания", "Специфика" (для категории "Пластилин").

А такие параметры как: "Количество стекол", "Высота", "Ширина", "Размеры", "Цветов в наборе" пользователь вводит текстом сам на свое усмотрение.

Как видим, для каждой категории предусмотрены свои списки параметров. Для большинства таких параметров предусмотрены свои четко обозначенные варианты значений, а для остальных параметров - информация вольная на усмотрение пользователя.

Как организовать структуру хранения таких категорий с их перечнями параметров и перечнями вариантами значений для некоторых этих параметров? Как организовать и хранить создаваемые товары, привязанные к категориям с заполненными значениями параметров?

Надеюсь, я достаточно доступно для понимания описал вопрос. Много уточнений привел для того, что бы точно понять вопрос и не упустить ни одной значащей детали.
Ответ: На чем я остановился:

для реализации конечного продукта с уникальным набором предопределенного набора свойств/параметров я создаю 4 таблицы:

category (id, title), parameter (id, categoryid, title, possiblevalue), product (id, title, categoryid), productparametervalue (id, parameterid, productid, value).

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

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

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

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

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

Есть еще нюансы, пока работаю над определением будущих сложностей в такой структуре. Пытаюсь разработать еще 1-2 альтернативы для сравнения и прогнозов.
Вопрос: Запрос, сопоставление наборов записей

Все привет.

В базе есть 2 таблицы: наборы(kits) и комплекты(sets). Наборы содержат товары и количество, комплекты содержат наборы, товары, количество, причем количество может быть кратно увеличено. Нужно найти комплекты с неверными наборами(не кратно различается количество, состав и т.п.)

Тестовые скрипты для создания и заполнения таблиц во вложении.

Не получается написать условия в запросе, по количеству вроде вышло, а вот по составу возникли сложности, не могу сравнить составы...

select 
	s.id, s.name	
from sets as s
left join kits as k on s.id_kit = k.id and
	s.id_item = k.id_item
-- where not s.value%k.value = 0


Подскажите, пож-та :)

К сообщению приложен файл (script.sql - 10Kb)
Ответ: Тогда смотри.

Сначала возьми таблицу sets, из неё извлеки только пары (distinct id, id_kit).
Далее - по любой записи из группы по id (скажем, min(id_kit)) посчитай количество наборов, проверь, что оно целое (если нет - уже косяк), на основании данных таблицы kits составь, как должна выглядеть группа записей из sets для этого id, и сравни с тем, что есть в sets реально. Не совпало хотя бы в одной записи - косяк.
Вопрос: Создание хранимой процедуры. В чём может быть проблема?

Есть простой запрос. Из этого запроса необходимо создать хранимую процедуру.
Запрос:
SELECT
  id, name, category, ROUND((
    1000 * 6371 * ACOS (
      COS ( RADIANS(51.42689) )
      * COS( RADIANS( latitude ) )
      * COS( RADIANS( longitude ) - RADIANS(31.42689) )
      + SIN ( RADIANS(51.522256) )
      * SIN( RADIANS( latitude ) )
    )
  ), 3) AS distance, address, latitude, longitude, 
  (SELECT name FROM localities WHERE id = locality_id) AS locality_name, locality_id
FROM shops
HAVING distance < 150
ORDER BY distance;


Создание хранимой процедуры из вышеописанного запроса:
DROP PROCEDURE IF EXISTS `get_nearest_shops`;
DELIMITER //
CREATE PROCEDURE get_nearest_shops(
  IN p_lat DOUBLE, 
  IN p_lng DOUBLE, 
    IN p_radius DOUBLE,
    OUT p_id INT(10),
    OUT p_name VARCHAR(45),
    OUT p_category ENUM('undefined','auto','children_prod','food','game','book',
                        'electronics','beuty&health','fashin','footwear','clothing',
                        'sports','homewere','pet_prod','services','gift&flowers'),
    OUT p_distance DOUBLE, 
    OUT p_latitude DOUBLE,
    OUT p_longitude DOUBLE,
    OUT p_locality VARCHAR(45),
    OUT p_locality_id INT(10))
BEGIN 
  DECLARE sign_after_point INT(10) DEFAULT 3;
  SELECT
    id, name, category, ROUND((
    1000 * 6371 * ACOS (
      COS ( RADIANS(p_lat) )
      * COS( RADIANS( latitude ) )
      * COS( RADIANS( longitude ) - RADIANS(p_lng) )
      + SIN ( RADIANS(p_lat) )
      * SIN( RADIANS( latitude ) )
      )
    ), sign_after_point) AS distance, latitude, longitude, 
        (SELECT name FROM localities WHERE id = locality_id) AS locality, 
        locality_id
  INTO
    p_id, p_name, p_category, p_distance, p_latitude, p_longitude, 
        p_locality, p_locality_id
    FROM shops
  HAVING distance < p_radius
  ORDER BY distance;
END;//


В результате хранимая процедура создаётся без единой ошибки но в отличии от простого запроса не выводит информацию, при том что входящие данные одинаковы.
В чем может быть ошибка? Как лучше поступить?
Спасибо.
Ответ:
alexiuscrow

В результате хранимая процедура создаётся без единой ошибки но в отличии от простого запроса не выводит информацию, при том что входящие данные одинаковы.
В чем может быть ошибка? Как лучше поступить?
Спасибо.



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

убери из запроса фразу INTO -- запрос будет формировать набор данных, и ты сможешь его получить на клиентской стороне как нормальный набор данных (при этом все OUT-параметры тоже не нужны).
Вопрос: Импорт файла Excel с датами создания и обновления файла

Здравствуйте, Знающие люди, есть необходимость импортировать excel файлы с их датами создания-обновления. Нет ли решения на VBA-SQL?
Ответ:
Сообщение от habanasilor
excel файлы с их датами создания-обновления.
Для получения свойств дат создания и обновления можно использовать FSO. Пример функции отдающей даты создания, последнего доступа и последней модификации
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function FileProperty(PathFile)
    Dim FSO, File, Str
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set File = FSO.GetFile(PathFile)
    Str = vbNullString
    Str = Str & "Дата создания - " & File.DateCreated & vbCrLf
    Str = Str & "Дата последнего доступа - " & File.DateLastAccessed & vbCrLf
    Str = Str & "Дата последней модификации - " & File.DateLastModified & vbCrLf
    FileProperty = Str
End Function
Вопрос: Получение баланса пользователя...

Привет! Можешь помочь мне пожалуйста? Я пытаюсь сделать получение баланса пользователя...
Есть код:

PHP:

  1. $mysqli = new mysqli($config['db_host'], $config['db_login'], $config['db_passw'], $config['db_name']);
  2. if ($bal = $mysqli->real_query("SELECT `balance` FROM `users` WHERE login = 'JaugelPon'")) {
  3.     $balance = ("$bal");
  4.     echo("Баланс: $balance руб.");
  5. }
  6. $mysqli->close();

При выполнение он возвращает "1"...
Структура таблицы, может там что-то не так?

CODE (SQL):

  1. `id` bigint(20) NOT NULL,
  2. `login` char(32) DEFAULT NULL,
  3. `password` char(32) DEFAULT NULL,
  4. `balance` int(10) NOT NULL DEFAULT '0'

Пользователь JaugelPon есть, его баланс 3254.
При выполнении "SELECT `balance` FROM `users` WHERE login = 'JaugelPon'" в консоли PMA выводится баланс...


UPD: Починил вот так
PHP:

  1. $mysqli = new mysqli($config['db_host'], $config['db_login'], $config['db_passw'], $config['db_name']);
  2. $result = $mysqli->query("SELECT * FROM users WHERE id=1");
  3. $row = $result->fetch_assoc();
  4. echo($row['balance']);
  5. $mysqli->close();

(Отредактировано автором: 25 Мая, 2017 - 13:49:56)

Ответ:
andrewkard пишет:

отлично. Цикл while тут не нужен,

$row = $result->fetch_assoc();

вернет первую строку набора.

Спасибо! Жалко что спасибки не могу ставить...