Posted 8 января, 20213 yr comment_166696 Добрый день. Подскажите, как можно сформировать запрос строк (цикличный) из разных баз данных (но с доступом от одного пользователя) на 3.4 делал так $this->DB->build( array( 'select' => 'm.member_id,g.guard_id,s.steamid ', 'from' => 'guard.ac_list g, forum.members m, steam.ac_status s', 'where' => ' l.status = "1" and g.member_id = g.guard_id and l.member_id = p.pp_member_id and s.steamid = m.steamid ', 'order' => '`create` desc limit '.$start_from.', '.$limit.'' ) ); $this->DB->execute(); while( $ac= $this->DB->fetch() ) { //Код... } Как это воспроизвести на IPS4.5 ? Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/ Share on other sites Больше вариантов
8 января, 20213 yr comment_166714 перекопал базы движков. по мне так это бред какой то. Добрый день. А точней можно? Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166714 Share on other sites Больше вариантов
8 января, 20213 yr comment_166720 HooLIGUN /** * Build SELECT statement * * @param array|string $columns The columns (as an array) to select or an expression * @param array|string $table The table to select from. Either (string) table_name or (array) ( name, alias ) or \IPS\Db\Select object * @param array|string|NULL $where WHERE clause - see \IPS\Db::compileWhereClause() for details * @param string|NULL $order ORDER BY clause * @param array|int $limit Rows to fetch or array( offset, limit ) * @param string|NULL|array $group Column(s) to GROUP BY * @param array|string|NULL $having HAVING clause (same format as WHERE clause) * @param int $flags Bitwise flags * @li \IPS\Db::SELECT_DISTINCT Will use SELECT DISTINCT * @li \IPS\Db::SELECT_MULTIDIMENSIONAL_JOINS Will return the result as a multidimensional array, with each joined table separately * @li \IPS\Db::SELECT_FROM_WRITE_SERVER Will send the query to the write server (if read/write separation is enabled) * @return \IPS\Db\Select * */ public function select( $columns=NULL, $table, $where=NULL, $order=NULL, $limit=NULL, $group=NULL, $having=NULL, $flags=0 ) // Get the select object $select = \IPS\Db::i()->select( '*', 'some_table', array( 'field=?', 1 ), 'some_column DESC', array( 0, 10 ) ); // Force a specific index to be used for the query $select = $select->forceIndex( 'some_index' ); // Join another table on $select = $select->join( 'other_table_name', 'other_table_name.column=some_table.column', 'LEFT' ); // Now, get the number of results returned $results = count( $select ); // Tell the iterator that keys should be 'column_a' and values should be 'column_b' $select = $select->setKeyField( 'column_a' )->setValueField( 'column_b' ); // Finally, loop over the results foreach( $select as $columnA => $columnB ) { print $columnA . ': ' . $columnB . '<br>'; } Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166720 Share on other sites Больше вариантов
9 января, 20213 yr Author comment_166724 10 часов назад, SlawkA сказал: перекопал базы движков. по мне так это бред какой то. Добрый день. А точней можно? Добрый день. В движке такого быть не может, ибо он использует одну (свою) базу. у меня цель - получить информацию из разных БД одним запросом Код из первого поста - рабочий вариант из версии 3.4 accop пользуюсь этой докой, то что мне нужно - не работает Если делать так $select = \IPS\Db::i()->select( 'm.member_id,g.guard_id,s.steamid ', 'guard.list g,forum.members m,steam.list s', array( 'field=?', 1 )... то запрос конструируется как \ select m.member_id,g.guard_id,s.steamid from `guard.list g,forum.members m,steam.list s` а надо select m.member_id,g.guard_id,s.steamid from `guard`.`list` g,`forum`.`members` m,`steam`.`list` s Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166724 Share on other sites Больше вариантов
9 января, 20213 yr comment_166726 Новое соединение по всей видимости строится так: $newConnection = new \IPS\Db($host, $username, $password, $database, $port, $socket); Дальше уже можно так: $newConnection->select( $columns, $table, $where, $order, $limit ); Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166726 Share on other sites Больше вариантов
9 января, 20213 yr Author comment_166735 2 часа назад, Respected сказал: Новое соединение по всей видимости строится так: $newConnection = new \IPS\Db($host, $username, $password, $database, $port, $socket); Дальше уже можно так: $newConnection->select( $columns, $table, $where, $order, $limit ); Я могу строить новое подключение, мне нужно в одном (текущем) подключении использовать несколько баз select * from `db1`.`members`,`db2`.`members`,`db3`.`members` Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166735 Share on other sites Больше вариантов
9 января, 20213 yr comment_166736 4 часа назад, HooLIGUN сказал: Если делать так и 4 часа назад, HooLIGUN сказал: пользуюсь этой докой не сочетается - потому что делаете не по доке. например вы видите первый код с комментариями для построения запроса, при этом вы понятно что указываете в втором аргументе guard.list g,forum.members m,steam.list s Если вам нужно просто выполнить запрос То согласно документации: If you need to build an SQL statement and then return it instead of running it, you can set \IPS\Db::i()->returnQuery = TRUE before calling the driver to build a query. To run a MySQL query that has been fully built already represented as a string, you can call the query() method. \IPS\Db::i()->query( "UPDATE some_table SET field_a='value' WHERE id_field=1" ); You should typically avoid using the query() method directly, as the other built in methods automatically handle things like escaping values, prepending the database table prefix and so on. HooLIGUN если у вас внешние подключения $connection = \IPS\Db::i( 'external', array( 'sql_host' => 'localhost', 'sql_user' => 'username', 'sql_pass' => 'password', 'sql_database' => 'database_name', 'sql_port' => 3306, 'sql_socket' => '/var/lib/mysql.sock', 'sql_utf8mb4' => true, ) ); Respected у тебя наверно старый метод. у 4 версии как я выше написал Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166736 Share on other sites Больше вариантов
9 января, 20213 yr Author comment_166738 select l.row1,l.row2 m.row1 , p.pp_thumb_photo as avatar, s.date as lastdate FROM db1.ac_list l,db2.members m ,db2.profile_portal p,db1.ac_status s where l.status = "1" and l.row1 = m.row1 and l.row1 = p.row1 and s.member_id = l.member_id Я наверное всех больше запутал) accop , можете подсказать, как собрать этот запрос согласно доке? Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166738 Share on other sites Больше вариантов
9 января, 20213 yr comment_166739 HooLIGUN как писал выше, ты можешь просто использовать чистый SQL в методе query Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166739 Share on other sites Больше вариантов
9 января, 20213 yr Author comment_166742 accop Нет, мне нужно еще и вывести информацию по этому запросу Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166742 Share on other sites Больше вариантов
9 января, 20213 yr comment_166743 HooLIGUN так $query = \IPS\Db::i()->query( ТВОЙ ЗАПРОС ); Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166743 Share on other sites Больше вариантов
9 января, 20213 yr Author comment_166744 2 минуты назад, accop сказал: HooLIGUN так $query = \IPS\Db::i()->query( ТВОЙ ЗАПРОС ); Да я понял. Я сначала не правильно вывел. foreach ($select as $row) { print_r ($row); } Сработало. Спасибо! Link to comment https://ipbmafia.ru/topic/22775-sql-zapros-k-baze-php/?&do=findComment&comment=166744 Share on other sites Больше вариантов
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.