Ответы пользователя по тегу MySQL
  • CHECK TABLE может ли запрос запускаться сам?

    @romalu Автор вопроса
    Предварительно во всем "виновато" резервное копирование hestia
    sudo /usr/local/hestia/bin/v-backup-users
    которое запускается в 5 утра. Т. к. данных много, то "большая" таблица проверяется сильно позже. Видимо виновата строчка в файле v-backup-users
    # Auto-repair all databases before backuping all accounts
    mysqlrepair --all-databases --check --auto-repair > /dev/null 2>&1
    Ответ написан
    Комментировать
  • Какой индекс поставить в innodb compressed таблицу?

    @romalu Автор вопроса
    Все, mysql как всегда тупит, не тот индекс использует. Надо
    SELECT * FROM `pages` USE INDEX (parsed_3) WHERE `parsed` = '0' AND `disable` = '0' ORDER BY `id` LIMIT 20

    parsed_3 - это последний добавленный индекс ( `parsed`, `disable`, `id`)
    Ответ написан
    Комментировать
  • Как написать запрос с "USE INDEX (artist_2)" используя kohana 3 orm?

    @romalu Автор вопроса
    Всем спасибо за помощь, для себя выбрал путь переопределения методов классов в приложении.
    Добавляем метод в ORM (application/classes/ORM.php):
    <?
    class ORM extends Kohana_ORM {
    
    	public function use_index($index)
    	{
    		$this->_db_pending[] = array(
    			'name' => 'use_index',
    			'args' => array($index),
    		);
    		return $this;
    	}
    }

    И прописываем нужное в application/classes/Database/Query/Builder/Select.php
    <?
    class Database_Query_Builder_Select extends Kohana_Database_Query_Builder_Select {
    
    	protected $_use_index = NULL;
    
    	public function use_index($index)
    	{
    		$this->_use_index = $index;
    
    		return $this;
    	}
    
    	public function compile($db = NULL)
    	{
    		if ( ! is_object($db))
    		{
    			// Get the database instance
    			$db = Database::instance($db);
    		}
    
    		// Callback to quote columns
    		$quote_column = array($db, 'quote_column');
    
    		// Callback to quote tables
    		$quote_table = array($db, 'quote_table');
    
    		// Start a selection query
    		$query = 'SELECT ';
    
    		if ($this->_distinct === TRUE)
    		{
    			// Select only unique results
    			$query .= 'DISTINCT ';
    		}
    
    		if (empty($this->_select))
    		{
    			// Select all columns
    			$query .= '*';
    		}
    		else
    		{
    			// Select all columns
    			$query .= implode(', ', array_unique(array_map($quote_column, $this->_select)));
    		}
    
    		if ( ! empty($this->_from))
    		{
    			// Set tables to select from
    			$query .= ' FROM '.implode(', ', array_unique(array_map($quote_table, $this->_from)));
    		}
    
    		if ($this->_use_index !== NULL)
    		{
    			// Use index
    			$query .= " USE INDEX (" . $this->_use_index . ")";
    		}
    
    		if ( ! empty($this->_join))
    		{
    			// Add tables to join
    			$query .= ' '.$this->_compile_join($db, $this->_join);
    		}
    
    		if ( ! empty($this->_where))
    		{
    			// Add selection conditions
    			$query .= ' WHERE '.$this->_compile_conditions($db, $this->_where);
    		}
    
    		if ( ! empty($this->_group_by))
    		{
    			// Add grouping
    			$query .= ' '.$this->_compile_group_by($db, $this->_group_by);
    		}
    
    		if ( ! empty($this->_having))
    		{
    			// Add filtering conditions
    			$query .= ' HAVING '.$this->_compile_conditions($db, $this->_having);
    		}
    
    		if ( ! empty($this->_order_by))
    		{
    			// Add sorting
    			$query .= ' '.$this->_compile_order_by($db, $this->_order_by);
    		}
    
    		if ($this->_limit !== NULL)
    		{
    			// Add limiting
    			$query .= ' LIMIT '.$this->_limit;
    		}
    
    		if ($this->_offset !== NULL)
    		{
    			// Add offsets
    			$query .= ' OFFSET '.$this->_offset;
    		}
    
    		if ( ! empty($this->_union))
    		{
    			foreach ($this->_union as $u) {
    				$query .= ' UNION ';
    				if ($u['all'] === TRUE)
    				{
    					$query .= 'ALL ';
    				}
    				$query .= $u['select']->compile($db);
    			}
    		}
    
    		$this->_sql = $query;
    
    		return parent::compile($db);
    	}
    
    }

    На заметку, в методе compile я дописал строки в исходный метод compile
    if ($this->_use_index !== NULL)
    		{
    			// USE INDEX
    			$query .= " USE INDEX (" . $this->_use_index . ")";
    		}

    Теперь можно использовать ORM:
    ORM::factory('Mp3')->use_index('artist_2')->where('artist', '=', $artist_name)->where('id', '>', $start_mp3_id)->order_by('id')->limit(10)->find_all();
    Ответ написан
    Комментировать
  • Как из excel вывести в бд phpmyadmin?

    У меня тоже была только-что такая проблема. Методом тыка обнаружил, что проблема таки в кодировке. Например, открываете файл csv в программе notepad++ и смотрите кодировку в меню "Кодировки". Скорее она у вас в UTF-8 (с BOM), а должна быть в UTF-8 без BOM. Насколько помню, BOM добавляет какой-то непечатаемый символ в начало файла, из-за этого и ошибка.
    Ответ написан
    Комментировать