Kom ihåg mig?
Home Menu

Menu


SQL hämta rader med vissa ord i

 
 
Ämnesverktyg Visningsalternativ
Oläst 2013-06-24, 11:11 #1
lubic lubic är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 205
lubic lubic är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 205
Nu tog jag iofs koden med HAVING från kod ovan. Det jag gjorde var att joina på lite tabeller för att hämta ut mer information. Men som sagt, det är kanske inte omöjligt att join på detta på en gång, för att slippa subqueries? Vet dock inte om det är någon märkbar skillnad i prestanda att göra så?

Men du får gärna ge en query som fungerar för att ta fram alla filmer som har två (eller flera) genrer, som då alltså inte använder HAVING på detta sätt. Om det nu skulle ge bättre prestanda, dvs.
lubic är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-06-24, 17:34 #2
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Jag gjorde en rolig variant där jag la upp en extern tabell med de genre man vill visa:

Kod:
delimiter $$

CREATE TABLE `genreparam` (
  `idgenreparam` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`idgenreparam`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
Och så moddade jag SPn lite genom att lägga till ytterligare två subquerys för att hämta parametervärdena. La upp värdena 10 och 11 i parametertabellen, då returneras två rader från databasen, film 159 och 206. Exekveringstiden blir 16 ms varje gång jag kör.

Kod:
delimiter $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `getMoviesShowAllGenres2`()
BEGIN
	SELECT q1.id, q1.date, group_concat(genres.name) genre_field FROM
	(
		SELECT m.id, m.date FROM movies m JOIN movie_genres mg ON mg.movie_id = m.id AND mg.genre_id IN (select idgenreparam from genreparam) GROUP BY m.id HAVING COUNT(DISTINCT mg.genre_id) = (select count(*) from genreparam) 
	) q1
	JOIN movie_genres mg on mg.movie_id = q1.id
	JOIN genres ON mg.genre_id = genres.id
	GROUP BY q1.id
	ORDER BY q1.date ASC ;
END$$
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-06-24, 17:35 #3
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Man bör snarare fråga sig om man kör en webbplats där det görs många databasanrop och planera för den trafik man väntar sig nu och i framtiden. Att akutoptimera i efterhand är sällan en bra idé. Att göra självklara optimeringar som att undvika subqueries bör vara en naturlig del i utvecklingsarbetet för de flesta.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:54.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017