- kategorija
- prikaz
- slika
- slika_kategorija
Jedna slika moze da ima vise kategorija, a u tabeli prikaz cuvam podatke o broju prikaza slike za odredjenu kategoriju + sajt posto se slika prikazuje na vise sajtova i sve to treba da se sortira po broju prikaza.
Ono sto pokusavam da uradim jeste da napravim upit koji ce mi izvuci sve slike za odredjeni sajt i odredjenu kategoriju sortirane po broju prikaza ali u cemu je problem.
Ako je tabela prikaz prazna i nad njoj radim insert/update samo kada neka slika ima 1 ili vise prikaza, onda imam problem sa LEFT JOIN-om jer treba da sortiram podatke po broju prikaza za odredjeni sajt i odredjenu kategoriju, a nemam dovoljno podataka u toj tabeli i onda upit pravi tmp tabele i sve radi jako sporo.
Ako pak napunim tabelu prikaz pri cemu unesem podatke za svaku sliku i kategoriju i stavim da je broj prikaza 0, onda to sve radi kako treba, mada mi se taj pristup ne svidja jer ako baza ima 1M slika i neka u proseku one imaju 3 kategorije to je 3M rekorda i ako napravim 10 sajtova, to znaci da bi tabela morala da ima 30M rekorda.
Da li postoji resenje za ovo u koliko slika nema ni jedan prikaz da ne moram da cuvam vrednost 0, a da ipak mogu da sortiram po broju prikaza i da te slike budu poslednje prikazane?
Drugi je problem sajt_id koji se nalazi samo u tabeli prikaz, pa ako zelim sve slike za odredjeni sajt, a one trenutno imaju 0 prikaza (tabela je prazna), necu dobiti ni jedan rezultat jer na upit WHERE sajt_id = 1, MySQL mi nece vratiti nista.
Ispod je sql dump tabela.
Hvala na pomoci!
-- phpMyAdmin SQL Dump
-- version 4.0.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jun 05, 2014 at 05:59 PM
-- Server version: 5.6.12-log
-- PHP Version: 5.4.12
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Database: `test`
--
CREATE DATABASE IF NOT EXISTS `test` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `test`;
-- --------------------------------------------------------
--
-- Table structure for table `kategorija`
--
CREATE TABLE IF NOT EXISTS `kategorija` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`naziv` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `kategorija`
--
INSERT INTO `kategorija` (`id`, `naziv`) VALUES
(1, 'Priroda'),
(2, 'Automobili'),
(3, 'Zelenilo');
-- --------------------------------------------------------
--
-- Table structure for table `prikaz`
--
CREATE TABLE IF NOT EXISTS `prikaz` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sajt_id` smallint(5) unsigned NOT NULL,
`slika_id` int(10) unsigned NOT NULL,
`kategorija_id` int(10) unsigned NOT NULL,
`broj_prikaza` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Table structure for table `slika`
--
CREATE TABLE IF NOT EXISTS `slika` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`naziv` varchar(64) NOT NULL,
`url` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `slika`
--
INSERT INTO `slika` (`id`, `naziv`, `url`) VALUES
(1, 'Drvo', '/slike/drvo.jpg'),
(2, 'BMW', '/slike/bmw.jpg');
-- --------------------------------------------------------
--
-- Table structure for table `slika_kategorija`
--
CREATE TABLE IF NOT EXISTS `slika_kategorija` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`slika_id` int(10) unsigned NOT NULL,
`kategorija_id` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `slika_kategorija`
--
INSERT INTO `slika_kategorija` (`id`, `slika_id`, `kategorija_id`) VALUES
(1, 1, 1),
(2, 2, 2),
(3, 1, 3);