Πρόβλημα με απλό query

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 15:58

Λοιπόν έχω έναν πίνακα με πληροφορίες για ταινίες, έναν δεύτερο με είδη ταινιών, και έναν τρίτο στον οποίο συσχετίζω id ταινιών me id ειδών, έτσι ώστε μια ταινία να ανήκει σε πολλά είδη. Θέλω να φτιάξω ένα query που θα επιλέγει διάφορα genres και θα εμφανίζει τα id των ταινιών που ανήκουν σίγουρα στα επιλεγμένα είδη και ενδεχομένως και σε κάποια παραπάνω. Έχω φτιάξει ένα απλό query αλλά δεν μου δουλεύει όπως θέλω. Αυτό είναι:

SELECT filmID FROM filmsngenres WHERE genreID='1' AND genreID='3'

Αυτό το query δεν μου εμφανίζει τίποτα ενώ υπάρχουν ταινίες που ανήκουν στο genreID='1' αλλά και στο genreID='3'. Τι κάνω λάθος;

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 16:02

Threshold έγραψε:Λοιπόν έχω έναν πίνακα με πληροφορίες για ταινίες, έναν δεύτερο με είδη ταινιών, και έναν τρίτο στον οποίο συσχετίζω id ταινιών me id ειδών, έτσι ώστε μια ταινία να ανήκει σε πολλά είδη. Θέλω να φτιάξω ένα query που θα επιλέγει διάφορα genres και θα εμφανίζει τα id των ταινιών που ανήκουν σίγουρα στα επιλεγμένα είδη και ενδεχομένως και σε κάποια παραπάνω. Έχω φτιάξει ένα απλό query αλλά δεν μου δουλεύει όπως θέλω. Αυτό είναι:

SELECT genreID FROM filmsngenres WHERE genreID='1' AND genreID='3'

Αυτό το query δεν μου εμφανίζει τίποτα ενώ υπάρχουν ταινίες που ανήκουν στο genreID='1' αλλά και στο genreID='3'. Τι κάνω λάθος;
opos to exeis mono to filmID mporei na sou emfanisei... sto select vazoume oti theloume na paroume apo thn vash eite xrhsimopoiontas ton asterisko (select *) eite mono auta pou theloume na emfanisoume sthn sygkekrimmenh selida (proteinomeno) opos gia paradeigma: select filmID, name,category klp klp
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 16:04

Ναι το είδα και το διόρθωσα το query αλλά μάλλον δεν πρόλαβες τη διορθωση :P

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 16:53

Το πρόβλημα όμως δεν έχει λυθεί, απλά έγραψα λάθος το query εδώ αρχικά.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 17:37

Κώδικας: Επιλογή όλων

SELECT genreID FROM filmsngenres WHERE genreID='1' OR genreID='3' 
OR not AND
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 18:03

Έτσι όμως πιάνει και τις 2 περιπτώσεις ξεχωριστά. Δηλαδή εμφανίζει όσες ανήκουν στο 1 και όσες στο 3. Εγώ θέλω να μου επιστρέφει όσες ανήκουν στο 1 και στο 3 και ενδεχομένως και σε κάποια παραπάνω είδη, αλλά σίγουρα στο 1 & στο 3.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 18:10

Threshold έγραψε:Έτσι όμως πιάνει και τις 2 περιπτώσεις ξεχωριστά. Δηλαδή εμφανίζει όσες ανήκουν στο 1 και όσες στο 3. Εγώ θέλω να μου επιστρέφει όσες ανήκουν στο 1 και στο 3 και ενδεχομένως και σε κάποια παραπάνω είδη, αλλά σίγουρα στο 1 & στο 3.
den katalavaino ti enoeis...
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 18:14

Πχ η ταινία με το ID=1 ανήκει στις κατηγορίες 1,3,5
αυτή με το ID=2 ανήκε στις κατηγορίες 1,3
αυτή με το ID=3 ανήκει στις 1,5,8

Θέλω το query να μου εμφανίζει όσες ανήκουν στις κατηγορίες 1 & 3 στα σίγουρα, και ενδεχομένως και σε κάποιες κατηγορίες παραπάνω. Άρα με το παραπάνω παράδειγμα θα βλέπω ως αποτελεσμα τις ταινίες με id=1 και id=2.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 18:21

Threshold έγραψε:Πχ η ταινία με το ID=1 ανήκει στις κατηγορίες 1,3,5
αυτή με το ID=2 ανήκε στις κατηγορίες 1,3
αυτή με το ID=3 ανήκει στις 1,5,8

Θέλω το query να μου εμφανίζει όσες ανήκουν στις κατηγορίες 1 & 3 στα σίγουρα, και ενδεχομένως και σε κάποιες κατηγορίες παραπάνω. Άρα με το παραπάνω παράδειγμα θα βλέπω ως αποτελεσμα τις ταινίες με id=1 και id=2.
se auto to paradeigma prepei na emfanizei kai ta 3 id giati to id=1 einai pantou.. to "ενδεχομένως και σε κάποιες κατηγορίες παραπάνω" den katalavaino.. mhpos enoeis na sou fernei prota oses anhkoun sthn 1 kai sthn 3 kai meta tis ypoloipes?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 18:43

Στο παράδειγμα αν πρόσεξες η ταινία με το ID=1 ανήκει σε 3 κατηγορίες ενώ αυτή με το ID=2 σε 2. Το query θέλω να μου επιστρέφει αυτές τις 2 και όχι την τρίτη μιας και αυτή δεν ανήκει στις ταινίες με genreID=3. Αυτό είναι εφικτό;

Το ενδεχομένως σε κάποιες κατηγορίες παραπάνω αναφέρεται στην ταινία με id=1 που ανήκει και στις ταινίες με genreID=5 εκτός των genreID=1 και 3.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από dva_dev » 22 Ιαν 2010 19:30

Πρόβλημα με απλό query
Αν είναι απλό το query, δεν θα έπρεπε να έχεις πρόβλημα να το φτιάξεις. Αν δεν μπορείς να το φτιάξεις, τότε είναι πιο σύνθετο από όσο φαντάζεσαι.

http://www.freestuff.gr/forums/viewtopic.php?t=45773
http://www.freestuff.gr/forums/viewtopic.php?t=43405

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Πρόβλημα με απλό query

Δημοσίευση από dimsis » 22 Ιαν 2010 20:21

Ανέβασε ένα backup της βάσης σου με dummy δεδομένα και τον κώδικα σου για να δούμε το σχήμα των πινάκων σου και να καταλάβουμε τι προσπαθείς να κάνεις… πιθανών να θέλει τίποτε select from tade where tade in (1,3,5) όπου το 1,3,5 μπορεί να είναι κανένα sub select των genre ή με τίποτε left join θα λυθεί όπως το κόβω στο τέλος.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 21:18

tora katalava ti thes.. auto pou sou leei o dva einai to sosto.. katevase to arxeio edo: http://www.freestuff.gr/forums/viewtopic.php?t=43405

auto vasika einai mia adynamia thn mysql kai eprepe na to eixan lysei me kapoia entolh opos exoun thn match..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Threshold
Δημοσιεύσεις: 48
Εγγραφή: 02 Μαρ 2009 22:16
Επικοινωνία:

Πρόβλημα με απλό query

Δημοσίευση από Threshold » 22 Ιαν 2010 21:33

Ανεβάζω μια το sql αρχείο. Έχει γίνει export με το phpmyadmin 3.2.4.

Κώδικας: Επιλογή όλων

-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 22, 2010 at 09:17 PM
-- Server version: 5.1.42
-- PHP Version: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `films`
--
CREATE DATABASE `films` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `films`;

-- --------------------------------------------------------

--
-- Table structure for table `disk`
--

CREATE TABLE IF NOT EXISTS `disk` (
  `diskID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `diskName` varchar(45) NOT NULL,
  PRIMARY KEY (`diskID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=94 ;

--
-- Dumping data for table `disk`
--

INSERT INTO `disk` (`diskID`, `diskName`) VALUES
(1, 'Films 1'),
(2, 'Films 2'),
(3, 'Films 3'),
(4, 'Films 4'),
(5, 'Films 5'),
(6, 'Films 6'),
(7, 'Films 7'),
(8, 'Films 8'),
(9, 'Films 9'),
(10, 'Films 10');

-- --------------------------------------------------------

--
-- Table structure for table `film`
--

CREATE TABLE IF NOT EXISTS `film` (
  `filmID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `filmName` varchar(90) NOT NULL,
  `diskID` int(10) unsigned NOT NULL,
  `filmLink` varchar(100) DEFAULT NULL,
  `yearID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`filmID`),
  KEY `FK_Disk` (`diskID`),
  KEY `FK_Year` (`yearID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=493 ;

--
-- Dumping data for table `film`
--

INSERT INTO `film` (`filmID`, `filmName`, `diskID`, `filmLink`, `yearID`) VALUES
(1, 'Test1', 1, 'gdfgdsgs', 1),
(2, 'Test2', 1, 'fasdfasd', 2),
(3, 'Test3', 2, 'fasdfsafsdafd', 2),
(4, 'Test4', 2, 'gdfgsgasdsddf', 2);

-- --------------------------------------------------------

--
-- Table structure for table `filmsngenres`
--

CREATE TABLE IF NOT EXISTS `filmsngenres` (
  `filmID` int(10) unsigned NOT NULL,
  `genreID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`filmID`,`genreID`),
  KEY `FK_genreID` (`genreID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `filmsngenres`
--

INSERT INTO `filmsngenres` (`filmID`, `genreID`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(4, 2),
(1, 3),
(2, 3),
(4, 3),
(4, 4),
(2, 5),
(3, 6);

-- --------------------------------------------------------

--
-- Table structure for table `genre`
--

CREATE TABLE IF NOT EXISTS `genre` (
  `genreID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `genreName` varchar(45) NOT NULL,
  PRIMARY KEY (`genreID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;

--
-- Dumping data for table `genre`
--

INSERT INTO `genre` (`genreID`, `genreName`) VALUES
(1, 'Action'),
(2, 'Adventure'),
(3, 'Animation'),
(4, 'Biography'),
(5, 'Comedy'),
(6, 'Crime'),
(7, 'Documentary'),
(8, 'Drama'),
(9, 'Family'),
(10, 'Fantasy'),
(11, 'Film-Noir'),
(12, 'Game-Show'),
(13, 'History'),
(14, 'Horror'),
(15, 'Music'),
(16, 'Musical'),
(17, 'Mystery'),
(18, 'News'),
(19, 'Reality-TV'),
(20, 'Romance'),
(21, 'Sci-Fi'),
(22, 'Short'),
(23, 'Sport'),
(24, 'Talk-Show'),
(25, 'Thriller'),
(26, 'War'),
(27, 'Western');

-- --------------------------------------------------------

--
-- Table structure for table `years`
--

CREATE TABLE IF NOT EXISTS `years` (
  `yearID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `yearName` int(10) unsigned NOT NULL,
  PRIMARY KEY (`yearID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=33 ;

--
-- Dumping data for table `years`
--

INSERT INTO `years` (`yearID`, `yearName`) VALUES
(1, 1976),
(2, 1977),
(3, 1978),
(4, 1979),
(5, 1980);

--
-- Constraints for dumped tables
--

--
-- Constraints for table `film`
--
ALTER TABLE `film`
  ADD CONSTRAINT `FK_Disk` FOREIGN KEY (`diskID`) REFERENCES `disk` (`diskID`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_Year` FOREIGN KEY (`yearID`) REFERENCES `years` (`yearID`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `filmsngenres`
--
ALTER TABLE `filmsngenres`
  ADD CONSTRAINT `FK_filmID` FOREIGN KEY (`filmID`) REFERENCES `film` (`filmID`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_genreID` FOREIGN KEY (`genreID`) REFERENCES `genre` (`genreID`);
Συνημμένα
localhost.zip
(1.35 KiB) Μεταφορτώθηκε 146 φορές

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Πρόβλημα με απλό query

Δημοσίευση από fafos » 22 Ιαν 2010 22:05

Kanonika eprepe na to psakseis monos sou alla anyway.. me vrhkes stis kales mou.. anelyse to ligo.. mh to kaneis aplos copy-paste..

Κώδικας: Επιλογή όλων


SELECT filmsngenres.filmID as fid,filmsngenres.genreID	FROM filmsngenres
	WHERE filmsngenres.genreID IN ('1', '3') GROUP BY filmsngenres.filmID

HAVING COUNT(filmsngenres.filmID) = ( SELECT COUNT(*) FROM genre WHERE genre.genreID IN ('1', '3') )


auto tha sou gyrisei ta fid (filmID): 1,2,4
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης