Jump to content
покупайте без комиссии
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

Здравствуйте!

Изложу ситуацию подробно.

Разработчик по аналогии с системой товаров добавил на сайт свою. Она использовала несколько таблиц, но в рамках данного диалога интересуют две:

основная, в которой содержится id, причастность к категории и т.д. и description, где были изображения.

Я сумел прописать для админки все, но для каталога возникла проблемка. 

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

Так вот, названия таблиц: winery и winery_description, добавилась winery_images, где теперь содержатся все адреса изображений, а функция getWinery выглядит так.

    public function getWinery($winery_id) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "winery i LEFT JOIN " . DB_PREFIX . "winery_description id ON (i.winery_id = id.winery_id) LEFT JOIN " . DB_PREFIX . "winery_to_store i2s ON (i.winery_id = i2s.winery_id) WHERE i.winery_id = '" . (int)$winery_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");

        return $query->row;
    }
 

Link to post
Share on other sites

Не нужно применять DISTINCT ко всем полям...

Вот почищенный запрос:
 

public function getWinery($winery_id) {
	$sql = "
		SELECT i.*       <- Здесь также можно добавить выборку других полей
		FROM " . DB_PREFIX . "winery a1
		LEFT JOIN " . DB_PREFIX . "winery_description a2 ON a2.winery_id = a1.winery_id
		LEFT JOIN " . DB_PREFIX . "winery_to_store a3 ON a3.winery_id = a1.winery_id
		LEFT JOIN " . DB_PREFIX . "winery_images a4 ON a4.winery_id = a1.winery_id
		WHERE a1.winery_id = '" . (int)$winery_id . "'
		  AND a1.status = '1'
		  AND a2.language_id = '" . (int)$this->config->get('config_language_id') . "'
		  AND a3.store_id = '" . (int)$this->config->get('config_store_id') . "'
		LIMIT 1
    ";

    $query = $this->db->query($sql);

    return $query->row;
}


Также $this->config->get('config_store_id')  не будет работать в админке, значение из админки будет всегда равно NULL

Edited by kagan
Link to post
Share on other sites

Здесь нужно возвращать rows

Судя по всему

winery_images 

  имеет связь много к одному.

Link to post
Share on other sites

Тогда запрос не будет эффективный (из-за того что мы дублируем описание для каждой строки).
Лучше делать загрузку картинок отдельным запросом.

public function getWinery($winery_id) {
	$sql = "
		SELECT i.*, a2.description      <- Здесь также можно добавить выборку других полей
		FROM " . DB_PREFIX . "winery a1
		LEFT JOIN " . DB_PREFIX . "winery_description a2 ON a2.winery_id = a1.winery_id
		INNER JOIN " . DB_PREFIX . "winery_to_store a3 ON a3.winery_id = a1.winery_id
		WHERE a1.winery_id = '" . (int)$winery_id . "'
		  AND a1.status = '1'
		  AND a2.language_id = '" . (int)$this->config->get('config_language_id') . "'
		  AND a3.store_id = '" . (int)$this->config->get('config_store_id') . "'
		LIMIT 1
    ";

    $query = $this->db->query($sql);
    
    return $query->row;
}

public function getWineryImages($winery_id) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "winery_images WHERE winery_id = '" . (int)$winery_id . "'");
    
    return $query->rows;
}

 

Edited by kagan
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.