SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 07/09/2017, 04:52 PM   #411
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,465
Reputation: 131
Default Re: MySQL (F.A.Q.)

Второй запрос лучше делать так:
PHP Code:
SELECT 
    id

    
command_name
    IF(
SELECT count(*) FROM commands2 WHERE commands1.id commands2.command_id LIMIT 110) AS active 
FROM commands1

__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is online now   Reply With Quote
Old 07/09/2017, 05:45 PM   #412
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 417
Reputation: 12
Default Re: MySQL (F.A.Q.)

Я с JOIN что-то совсем разучился дружить (или не умел ), поэтому взял вариант Степашки и получилось это:
PHP Code:
SELECT 
    command_name

    IF((
SELECT count(*) FROM table_2table_3 WHERE table_1.id table_2.command_id AND table_3.Name 'Ник' AND table_3.id table_2.account_id LIMIT 1), 10) AS active 
FROM table_1 
Надеюсь, всё не совсем страшно получилось, но результат выдаёт нужный.
Спасибо всем за помощь
Eims is offline   Reply With Quote
Old 20/10/2017, 09:27 PM   #413
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 417
Reputation: 12
Default Re: MySQL (F.A.Q.)

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

Есть три таблицы:

account
PHP Code:
account_id player_name 
table1
PHP Code:
id account_id 
table2
PHP Code:
id table1_account_id tableacc_account_id 
table1 служит списком аккаунтов, выдвинутых на голосование (не больше 5).
table2 служит списком проголосовавших за игроков, выдвинутых на голосование
Ну про account нет смысла говорить.

Так вот, задача состоит в следующем:
Нужно вытащить имя игрока (account.player_name), выдвинутого на голосование (table1.account_id), из таблицы с аккаунтами и число проголосовавших за этого игрока.

Вытащить подобные данные для одного игрока не составит труда:
PHP Code:
//Получилось бы что-то типа такого
SELECT 
    a
.player_name,
    
COUNT(ec.candidate_id)
FROM  
    account 
AS a,
    
table1 AS t1
    
table2 AS t2
WHERE 
    
/*t1.account_id = id_аккаунта*/ /*t1.id = порядковый_номер_кандидата*/ AND
    
t1.account_id a.account_id AND
    
t1.account_id t2.table1_account_id

//Могут быть неточности, ибо прямо в браузере писал и не проверял 
Но вот с обработкой всех 5-и строк из table1 у меня появились трудности, ибо как-то никогда такой нужды не было и не разбирался в этом.
P.S. Если криво объяснил, то, на всякий случай, вот как, примерно, должно выглядеть всё в итоге - https://i.imgur.com/prE4W4O.png
Eims is offline   Reply With Quote
Old 20/10/2017, 09:38 PM   #414
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,465
Reputation: 131
Default Re: MySQL (F.A.Q.)

Как-то так:
PHP Code:
SELECT
    a
.player_name,
    (
SELECT COUNT(*) FROM table2 t2 WHERE t2.table1_account_id  a.account_id) as `count`
FROM
    account a
INNER JOIN
    table1 t1 ON t1
.account_id a.account_id
ORDER BY
    
`countDESC 
INNER JOIN автоматически исключит всех кандидатов которых не выдвигали.
И на выходе они ещё сортируются по количеству голосов.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is online now   Reply With Quote
Old 20/10/2017, 09:50 PM   #415
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 417
Reputation: 12
Default Re: MySQL (F.A.Q.)

EDIT: Всё же я криворукий. Прошу прощения за лишний пост.
Всё работает, спасибо. И теперь дошло как можно реализовать подобное, за что тоже спасибо.
Eims is offline   Reply With Quote
Old 01/01/2018, 03:10 AM   #416
gensek4
Big Clucker
 
Join Date: Jan 2015
Posts: 138
Reputation: 0
Default Re: MySQL (F.A.Q.)

Есть две таблицы:
bank (account, ...)
account(id, name, ...)

Нужно составить DELETE запрос из таблицы bank так, что бы bank.account = account.id по данному account.name. Вроде бы все логично обьясил.

Пробовал гуглить, в итоге получались такие запросы:

PHP Code:
DELETE FROM bank WHERE account IN (SELECT id FROM account WHERE name Dave_Mirra
PHP Code:
DELETE FROM bank LEFT JOIN bank ON account.id bank.account WHERE account.name Dave_Mirra 
gensek4 is offline   Reply With Quote
Old 01/01/2018, 09:18 AM   #417
gensek4
Big Clucker
 
Join Date: Jan 2015
Posts: 138
Reputation: 0
Default Re: MySQL (F.A.Q.)

Методом небольших проб, составил рабочий вариант -
PHP Code:
DELETE FROM bank WHERE account IN (SELECT id FROM `accountWHERE `name` = 'Dave_Mirra'
Однако, если таблиц стало больше:

account (id, name, ...)
bank (account, ...)
captchalog (account, ...)
employment_history (account, ...)
setname (account, ...)
transfers_log (account, ...)

Как быть?
gensek4 is offline   Reply With Quote
Old 01/01/2018, 09:42 AM   #418
ZiGGi
High-roller
 
ZiGGi's Avatar
 
Join Date: Sep 2008
Location: Russia
Posts: 1,718
Reputation: 334
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by gensek4 View Post
Методом небольших проб, составил рабочий вариант -
PHP Code:
DELETE FROM bank WHERE account IN (SELECT id FROM `accountWHERE `name` = 'Dave_Mirra'
Однако, если таблиц стало больше:

account (id, name, ...)
bank (account, ...)
captchalog (account, ...)
employment_history (account, ...)
setname (account, ...)
transfers_log (account, ...)

Как быть?
Нужно связать таблицы с каскадным удалением, пример: http://denis.in.ua/foreign-keys-in-mysql.htm
ZiGGi is offline   Reply With Quote
Old 01/01/2018, 10:07 AM   #419
gensek4
Big Clucker
 
Join Date: Jan 2015
Posts: 138
Reputation: 0
Default Re: MySQL (F.A.Q.)

Quote:
Originally Posted by ZiGGi View Post
Нужно связать таблицы с каскадным удалением, пример: http://denis.in.ua/foreign-keys-in-mysql.htm
Так, а если таблица на MyISAM? Можно же как-то связать с помощью LEFT JOIN, но у меня не получится
gensek4 is offline   Reply With Quote
Old 30/04/2018, 04:02 PM   #420
pawnoholic
Big Clucker
 
Join Date: Oct 2017
Posts: 68
Reputation: 3
Default Re: MySQL (F.A.Q.)

Как при загрузке всех полей (*), например домов, из базы данных, получить еще из таблицы аккаунтов имя игрока, если в поле с домами, например player_id, находится ид записи из таблицы с аккаунтами.
__________________
GitHub: @pawnoholic
pawnoholic is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[GameMode] Basic MySQL Account Script [MySQL R7, cache functions, easydialog, Whirlpool, salted passwords] ReneG Gamemode Scripts 71 02/03/2014 11:48 AM
[GameMode] MySQL CLEAN GAMEMODE [Whirlpool, MySQL BlueG R7, Cache, Ready Package (Windows)] GiamPy. Gamemode Scripts 13 13/09/2013 04:31 PM
BlueG MySQL plugin - Failed (plugins/mysql.so: undefined symbol: _Z13stringvprintfPKcPc) linuxthefish Plugin Development 10 13/07/2013 10:56 AM
[Tool/Web/Other] MySQL DB Manager - Easily manage your MySQL databases with this remote application fiki574 Tools and Files 13 22/07/2012 09:41 AM


All times are GMT. The time now is 07:49 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.