Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2020-02-07 15:00:37 ЛС | профиль | цитата
Master4eG писал(а):
Как выбрать всех например из таблицы users, где город - москва, ведь в users будет не город, а по-правильному city_id.

Add(MainForm,2953706,42,105)
{
Width=242
Height=245
BorderStyle=1
Position=1
Point(onQueryEndSession)
link(onCreate,403521:doOpen,[])
link(onQueryEndSession,403521:doClose,[])
}
Add(DS_SQLite,403521,84,119)
{
Name="mydb"
FileName=":memory:"
link(onOpen,8291282:doExec,[])
}
Add(DSC_Exec,8291282,126,119)
{
SQL="CREATE TABLE IF NOT EXISTS city_list \r\n(\r\n city_id INTEGER PRIMARY KEY,\r\n city_name TEXT NOT NULL UNIQUE,\r\n city_code TEXT NOT NULL\r\n);\r\n\r\nCREATE TABLE IF NOT EXISTS users\r\n(\r\n users_id INTEGER PRIMARY KEY,\r\n users_name TEXT,\r\n id_city INTEGER \r\n);"
DSManager="mydb"
link(onExec,8323013:doEvent1,[])
}
Add(DSC_Query,10548812,196,119)
{
SQL="SELECT count() FROM city_list;"
DSManager="mydb"
link(onQuery,5225380:doEvent,[])
}
Add(IndexToChanel,5225380,238,119)
{
link(onEvent1,6287214:doExec,[])
}
Add(DSC_Exec,6287214,280,119)
{
SQL="INSERT INTO city_list(city_name,city_code) values ("Москва","495");\r\nINSERT INTO city_list(city_name,city_code) values ("Сочи","8622");\r\nINSERT INTO city_list(city_name,city_code) values ("Иваново","0932");\r\nINSERT INTO city_list(city_name,city_code) values ("Самара","8462");\r\n\r\nINSERT INTO users values (1,"Сергей",1);\r\nINSERT INTO users values (2,"Виктор",2);\r\nINSERT INTO users values (3,"Сергей",4);\r\nINSERT INTO users values (4,"Иван",3);\r\nINSERT INTO users values (5,"Андрей",1); "
DSManager="mydb"
}
Add(Hub,8323013,168,119)
{
OutCount=3
link(onEvent1,10548812:doQuery,[])
link(onEvent2,16123899:doEvent1,[(186,132)(186,167)])
}
Add(DSC_Query,14879997,217,161)
{
SQL="SELECT users_id, city_name, users_name \r\n FROM users, city_list \r\n WHERE city_id=id_city\r\n ORDER BY city_name, users_name; "
DSManager="mydb"
link(onQuery,13786266:doStr,[])
link(onColumns,6261402:doClear,[])
}
Add(StringTable,6261402,301,161)
{
Top=50
Width=236
Height=166
Align=5
WinStyle=2
Columns=#5:id=30|5:Город|5:И м я|
Grid=0
}
Add(MT_String,13786266,259,161)
{
link(onResult,6261402:doAdd,[])
}
Add(ChildGroupBox,8795023,217,203)
{
link(onEvent1,16123899:doEvent2,[(262,209)(262,243)(177,243)(177,174)])
}
BEGIN_SDK
Add(EditMulti,2461057,21,21)
{
EventCount=1
WorkCount=1
Width=615
link(doWork1,14692575:doQuery,[(73,27)(73,55)])
}
Add(Label,6106886,35,56)
{
Left=5
Top=17
Width=128
Height=17
Caption="Имя Город"
AutoSize=1
}
Add(GroupBox,1868920,35,105)
{
Width=236
Height=43
Align=2
Font=[MS Sans Serif,8,1,255,1]
Caption="Добавить клиента."
}
Add(Edit,3931220,182,105)
{
Left=30
Top=15
Width=60
Text=""
}
Add(ComboBox,12782292,210,49)
{
Left=130
Top=15
Width=70
Height=21
ReadOnly=0
Point(Data)
}
Add(Button,4558982,84,168)
{
Left=205
Top=15
Width=20
Caption="+"
link(onClick,12168828:doString,[])
}
Add(InfoTip,11821466,427,35)
{
Info=#6: users|29:users_id INTEGER PRIMARY KEY,|16:users_name TEXT,|15:id_city INTEGER|
HAlign=0
Width=190
Height=67
Margin=5
}
Add(DSC_Query,14692575,126,49)
{
SQL="SELECT city_name, city_id FROM city_list ORDER BY city_name;"
DSManager="parent.mydb"
link(onQuery,12782292:doAdd,[])
link(onColumns,12782292:doClear,[])
}
Add(DSC_Exec,11397422,259,168)
{
DSManager="parent.mydb"
link(onExec,2461057:onEvent1,[(425,174)(425,27)])
}
Add(FormatStr,12168828,140,168)
{
DataCount=3
Mask="INSERT INTO users values(%1,"%2",%3);"
link(onFString,11397422:doExec,[])
link(Str1,13202391:Value,[])
link(Str2,3931220:Text,[(153,152)(188,152)])
link(Str3,12782292:Data,[(160,159)(230,159)])
}
Add(Memory,13202391,140,105)
{
Default=String(NULL)
}
END_SDK
Add(Hub,16123899,189,161)
{
InCount=2
link(onEvent1,14879997:doQuery,[])
link(onEvent2,8795023:doWork1,[(210,174)(210,209)])
}
Добавил ответ на вопрос: Как записать city_id в users.

Редактировалось 2 раз(а), последний 2020-02-07 15:56:13
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Master4eG
Ответов: 321
Рейтинг: 10
#17: 2020-02-14 21:45:17 ЛС | профиль | цитата
Спасибо Tad, меня не интересовала программа, извините, что сразу не сказал, опять же...
Мне интересно именно как запросы правильно составляются.
Вы как-то мне помогали:

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

На вашем примере научился выборку из 2 таблиц делать, спасибо вам, жаль insert не было, из-за "выпадающего списка", получился простой инсерт.

Можете подсказать на вскидку, если это легко... как получить 2 значения (2 строки) в одном столбце ? Весь интернет перерыл, честно, часа 2-3 сижу, просто могу сделать 2 разных запроса, но мне кажется можно одним.

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


Вот так выбираю одно значение (php, но не суть):


$updateTime = $mysqli->query("SELECT `update_time`
FROM information_schema.tables
WHERE `table_name` = '_workers'");

Если не трудно, помогите пожалуйста...

Редактировалось 5 раз(а), последний 2020-02-14 21:52:30
карма: 1

0
Ответов: 952
Рейтинг: 4
#18: 2020-02-14 22:34:35 ЛС | профиль | цитата
Проверить на что? Или просто узнать дату их обновления? Вопрос не понятен.

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

Редактировалось 1 раз(а), последний 2020-02-14 22:39:12
карма: 0

0
Ответов: 321
Рейтинг: 10
#19: 2020-02-14 23:50:17 ЛС | профиль | цитата
Решил вопрос
SELECT `update_time`
FROM information_schema.tables
WHERE `table_name` = '_workers' or `table_name` = '_apps'

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

Редактировалось 5 раз(а), последний 2020-02-15 01:22:23
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#20: 2020-02-15 11:08:20 ЛС | профиль | цитата
Master4eG писал(а):
меня не интересовала программа
Просто мне было лень словами объяснять, какими запросами получить тот или иной результат.
SELECT `update_time`
FROM information_schema.tables
WHERE `table_name` = '_workers' or `table_name` = '_apps'
Результат:
2020-02-14 18:33:29
2020-02-14 18:33:29
Кто где неизвестно.

Более правильно так:
SELECT table_name,update_time
FROM information_schema.tables
WHERE (table_name = '_workers') or (table_name = '_apps');
Результат:
table_nameupdate_time
_apps2020-02-14 18:33:29
_workers2020-02-14 18:33:29

Хотя и в том и в другом случае это нагрузка на глаза и мозги.
Правильно - создать триггер
AFTER UPDATE ON information_schema.tables._apps(update_time) сделать то-то и то-то (что ты там делаешь я не знаю)

Редактировалось 1 раз(а), последний 2020-02-15 11:22:25
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Master4eG
Ответов: 321
Рейтинг: 10
#21: 2020-02-20 17:59:58 ЛС | профиль | цитата
Tad, на вашем примере:


SELECT users_id, city_name, city_code, users_name 
FROM users, city_list
WHERE city_id=id_city
ORDER BY city_name, users_name;

А что, если, при регистрации пользователь не указал город и как в моем случае в таблице users, будет 0, или NULL, тогда данная выборка пропускает эти строки, т.е выборка users прерывается, где нет правильного city_id, который существует в city_list. Мне пришлось в city_list создать поле с city_id = 0, city_name = NULL, city_code = NULL, чтобы в случае чего выбирать пустые ячейки.
Насколько данное решение правильное ?! Подскажите пожалуйста, если не сложно.


карма: 1

0
Ответов: 16884
Рейтинг: 1239
#22: 2020-02-20 18:34:00 ЛС | профиль | цитата
Master4eG писал(а):
А что, если, при регистрации пользователь не указал город

1. Запреть регистрацию или перестать игру в КГБ.
2. В США есть тоже город МОСКВА и код у него не 495.
И как зарегистрируется Джон из американской МОСКВЫ ?
Да и в России есть одноимённые города в разных областях (и не один).
Город Район Область
ПриморскБалтийский РайонКалининградская Область
ПриморскВыборгский РайонЛенинградская Область

Думай сам.

Редактировалось 1 раз(а), последний 2020-02-20 18:52:59
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 321
Рейтинг: 10
#23: 2020-02-20 20:35:39 ЛС | профиль | цитата
Или Вы меня не поняли, или я Вас.

Tad писал(а):
И как зарегистрируется Джон из американской МОСКВЫ ?


Добавить в базу новое поле с американской Москвой.
Или создать поле "Другое", на случай, если в списке нет города пользователя. (мой случай)

Дело в том, что у меня создание заявок, и если исполнителей нет, то `Исполнитель` = 0.



Но далее при мониторинге, у меня как раз выходит проблема, с отображением списка заявок, пришлось добавить user'a с id=0...




Все отлично работает, блок исполнителей можно исправить при выборке where id != 0, но мне интересно правильно ли я сделал
Я сделал по вашему примеру из вашей программы, которую вы мне собрали, т.е выборка из 2х таблиц одним запросом.
             SELECT _apps.id, `time`, `address`, `sum`, `type`, _apps.city,`worker`,_apps.status as status, _workers.name,_workers.status AS w_status
FROM `_workers`, `_apps`
WHERE _apps.worker = _workers.vk_id
ORDER BY `id` DESC LIMIT 9

Редактировалось 1 раз(а), последний 2020-02-20 22:13:01
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#24: 2020-02-22 21:57:45 ЛС | профиль | цитата
Master4eG писал(а):
выборке where id != 0, но мне интересно правильно ли я сделал
Правильно.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 321
Рейтинг: 10
#25: 2020-02-22 23:01:08 ЛС | профиль | цитата
Tad писал(а):
Master4eG писал(а):
выборке where id != 0, но мне интересно правильно ли я сделал
Правильно.


Ну ведь хранить пустую строку в списке работников избыточное решение на мой взгляд, я сделал через LEFT JOIN.
И теперь чтобы проверить, свободна ли заявка, нужно сделать проверку на NULL.
Иными словами, из нашего примера, если не будет у пользователя города, тогда NULL, и выборка выберет его в любом случае как я понимаю.



SELECT users_id, city_name, city_code, users_name 
FROM `users` LEFT JOIN city_list ON `users`.`id_city` = city_list.city_id
ORDER BY city_name, users_name;


SELECT _apps.id, `time`, `address`, `sum`, `type`, _apps.city,`worker`,_apps.status as status, _workers.name,_workers.status AS w_status
FROM `_apps` LEFT JOIN _workers ON `_apps`.`worker` = _workers.vk_id
ORDER BY `id` DESC LIMIT 9




Редактировалось 1 раз(а), последний 2020-02-22 23:03:19
карма: 1

0
25
Сообщение
...
Прикрепленные файлы
(файлы не залиты)