Kom ihåg mig?
Home Menu

Menu


Hämta kategorier från MySQL databas

 
Ämnesverktyg Visningsalternativ
Oläst 2010-11-04, 16:28 #11
rhdf rhdf är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2006
Inlägg: 359
rhdf rhdf är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2006
Inlägg: 359
Gör ni inte en liten tankevurpa nu?
"databasmotorn jobbar fan så mycket snabbare än php. "
ja, men vad är det som skickar och tar emot saker till databasen, just det, php
och för varje query så måste man ju kontakta databasen

men det är just därför man skall låta databasmotorn jobba för att endast få ut den data man vill ha i ett format som är lätthanterligt.

"Det blir ungefär samma antal frågor ändå med alla joins. "
ursäkta?
Det blir ju ETT anrop och sen får man ju se till att skriva en vettig query
jag har en monster-query där jag joinar en tabell mot sig själv + att den innehåller 2 sub-selects som i sig innehåller en join.. den körs på ca 2-4 ms

Jag gjorde ett litet test och körde bara en query där jag hämtar top-kategorierna, gissa vad, den tog lika lång tid. Eftersom underkategoriernas frågor ser likadana ut så skulle detta då innebära, med i mitt fall 17 top-kategorier,4ms + 17*4ms =72ms (eller i bästa fall 36ms) detta utan att ha räknat med eventuell tid det tar att skicka saker till sql-servern

oavsett hur lång tid det tar så skall man självklart cacha resultatet så att man bara behöver göra en hämtning
rhdf är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-04, 17:24 #12
William William är inte uppkopplad
Medlem
 
Reg.datum: Oct 2010
Inlägg: 102
William William är inte uppkopplad
Medlem
 
Reg.datum: Oct 2010
Inlägg: 102
Citat:
Ursprungligen postat av rhdf Visa inlägg
Ja om man tycker om att hamra databasen med queries
Det tycker jag om.
William är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-06, 21:52 #13
Iggy Iggy är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2010
Inlägg: 23
Iggy Iggy är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2010
Inlägg: 23
Nu vet jag inte om jag är sent ute, men tror att en artikel jag skrev för ett par dagar sen kan vara användbar i det här sammanhanget: http://en.someotherdeveloper.com/art...h-calculation/

Den är väl en 95% färdig än så länge, och hittills finns den "bara" på engelska. Men hoppas att den är till nytta.
Iggy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-07, 10:36 #14
dAEks avatar
dAEk dAEk är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2006
Inlägg: 678
dAEk dAEk är inte uppkopplad
Mycket flitig postare
dAEks avatar
 
Reg.datum: Dec 2006
Inlägg: 678
Citat:
Ursprungligen postat av rhdf Visa inlägg
Jag gjorde ett litet test och körde bara en query där jag hämtar top-kategorierna, gissa vad, den tog lika lång tid. Eftersom underkategoriernas frågor ser likadana ut så skulle detta då innebära, med i mitt fall 17 top-kategorier,4ms + 17*4ms =72ms (eller i bästa fall 36ms) detta utan att ha räknat med eventuell tid det tar att skicka saker till sql-servern
Missade du att TS bad om hjälp? Att du har en query är ju inte till någon hjälp om du inte lägger upp den.
dAEk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-07, 14:31 #15
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Det viktigaste är att frågan/frågorna är skalbara, så att det inte gör något om du lägger till eller tar bort nya kategorier/underkategorier. Eftersom du laddar menyn ofta men ändrar den sällan (min gissning) så är cachning vägen att gå för att minska belastningen.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-07, 18:40 #16
rhdf rhdf är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2006
Inlägg: 359
rhdf rhdf är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2006
Inlägg: 359
Citat:
Ursprungligen postat av dAEk Visa inlägg
Missade du att TS bad om hjälp? Att du har en query är ju inte till någon hjälp om du inte lägger upp den.
Hur min query ser ut är inte så viktigt, eftersom det där var ett svar i debatten huruvida det var bättre att köra en komplicerad query för att få ut allt, eller köra nästlade querys för att åstadkomma samma resultat.

men i grunden så joinar jag tabellen med sig själv + att jag har med villkor för vilka kategorier som skall visas baserat på om det finns något innehåll under dessa (dessutom har jag ett par fula subquerys)
tror inte att TS skulle vara SÅ behjälpt av denna
Kod:
SELECT p.sortOrder,p.prodcatID as TopCatID,
(SELECT ProdCatName FROM prodcatnames WHERE ProdCatID =p.ProdCatID AND (LangCode = @langCode OR LangCode = 'en') ORDER BY (LangCode <> 'en') DESC LIMIT 1) As TopCatName,
pcl.CatName,pcl.ProdCatID FROM prodcat p
LEFT JOIN
(SELECT Distinct PG.ProdcatID,
(SELECT ProdCatName FROM prodcatnames WHERE prodcatnames.ProdCatID =PG.ProdCatID AND (LangCode = @langCode OR LangCode = 'en') ORDER BY (LangCode <> 'en') DESC LIMIT 1) As CatName,
PG.ParentID
FROM Prodcat AS PG WHERE PG.visible=true AND
((SELECT Count(A.ProdID) AS CountProdID FROM Articles AS A
INNER JOIN ProdTypes AS PT ON A.ProdTypeID = PT.ProdTypeID
WHERE PT.ProdcatID= PG.ProdcatID AND A.Deleted=False AND A.STOCK>0 AND A.NoShow=False)>0) Order By PG.SortOrder) as pcl ON pcl.parentID=p.prodcatid WHERE p.parentID=0 AND p.visible=1 Order By p.sortOrder,p.ProdCatID,pcl.ProdCatId;
rhdf är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-09, 20:03 #17
dAEks avatar
dAEk dAEk är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2006
Inlägg: 678
dAEk dAEk är inte uppkopplad
Mycket flitig postare
dAEks avatar
 
Reg.datum: Dec 2006
Inlägg: 678
Citat:
Ursprungligen postat av rhdf Visa inlägg
Hur min query ser ut är inte så viktigt, eftersom det där var ett svar i debatten huruvida det var bättre att köra en komplicerad query för att få ut allt, eller köra nästlade querys för att åstadkomma samma resultat.
Kodexempel är högst relevant fortfarande även om TS verkar ha glömt bort tråden. Att lägga upp en kodsnutt har ingen dött av men det kan hjälpa många.

Senast redigerad av dAEk den 2010-11-09 klockan 20:05
dAEk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-11-14, 14:53 #18
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Hej igen!

Jag har inte glömt bort tråden, men har varit lite upptagen
Jag löste det med två queries, en som hämtar alla grundkategorier och en som hämtar alla "barn" och sen loopade jag ut det med PHP.

Nu har jag dock tänkt om lite och behöver hjälp igen då jag har kört fast.

Jag har nu en array med arrayer som ser ut såhär:

Kod:
array(11) {
  [0]=>
  array(6) {
    ["cat1_id"]=>
    string(1) "7"
    ["cat2_id"]=>
    string(2) "11"
    ["cat1"]=>
    string(7) "Cat1"
    ["cat2"]=>
    string(5) "Cat2"
  }
  [1]=>
  array(6) {
    ["cat1_id"]=>
    string(1) "7"
    ["cat2_id"]=>
    string(1) "8"
    ["cat1"]=>
    string(7) "Cat1"
    ["cat2"]=>
    string(6) "Cat3"
  }
  [2]=>
  array(6) {
    ["cat1_id"]=>
    string(1) "12"
    ["cat2_id"]=>
    string(1) "13"
    ["cat1"]=>
    string(7) "Cat5"
    ["cat2"]=>
    string(5) "Cat6"
  }
....osv
Nu vill jag alltså bara loopa ut denna men jag lyckas inte av nån märklig anledning...!

Jag provade att loopa ut allt såhär som test, men det fungerar inte. Får en blank skärm.

Kod:
<? $i=0; ?>
<? $old_id = $cats[0]['cat1_id'] ?>
<? while ($i < count($cats)) : ?>

	<?=$cats[$i]['cat1']?>
	<? while($cats[$i]['cat1_id'] == $old_id) : ?>
		<?='->'.$cats[$i]['cat2']?>
		<? $old_id = $cats[$i]['cat1_id'] ?>
		<? $i++ ?>
	<? endwhile ?>

<? endwhile ?>
Vad har jag missat här?


EDIT:
Löste det. Min lilla exempelkod ser ut såhär om nån är nyfiken:

Kod:
<? $i=0; ?>
<? $old_id = $cats[0]['cat1_id'] ?>
<? while ($i < count($cats)) : ?>

	<?=$cats[$i]['cat1']?>
	<? if($cats[$i]['cat1_id'] == $old_id) : ?>
		<? while($cats[$i]['cat1_id'] == $old_id) : ?>
			<?='->'.$cats[$i]['cat2']?>
			<? $old_id = $cats[$i]['cat1_id'] ?>
			<? $i++ ?>
		<? endwhile ?>
		<? $old_id = $cats[$i]['cat1_id'] ?>
	<? else : ?>
		<? $i++ ?>
	<? endif ?>
	
<? endwhile ?>

Senast redigerad av Linuus den 2010-11-14 klockan 15:09
Linuus ä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 12:58.

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