php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.05.2005, 10:06  
Gast
 
Beiträge: n/a
Standard 2 verschachtelte while Schleifen. Großes Performanceproblem

Hier erstmal der Source:

PHP-Code:
function Gerateliste_Ausgabe ($Service_Typ,$Geraetetyp)
{
echo 
'<ul>';

           
$anfrage2="SELECT * FROM Eichler_PG epg INNER JOIN Eichler_Klassen ek ON ek.KlassenID = epg.KlassenID WHERE KlassenName = '".$Geraetetyp."' ORDER by PGName";
        
        
$uebergabe2=mysql_query($anfrage2);        
        
            while (
$zeile2=mysql_fetch_row($uebergabe2)) {        
            
            
$anfrage3="SELECT * FROM Eichler_Detail ed INNER JOIN Eichler_Option eo ON eo.OptionID = ed.OptionID WHERE PGID = '".$zeile2[0]."'";
                
                        
$uebergabe3=mysql_query($anfrage3);    

        
                        while (
$zeile4=mysql_fetch_row($uebergabe3)) {
                        
            
                        if (
$zeile4[11] == $Service_Typ) { // Wenn Kategorie == $Service_Typ dann echo
                            
$i++;
                            if (
$i == || $i == 15 || $i == 22) {
                            echo 
'<ul>';
                            
$j true;
                            }

                                echo 
'[*][url="index.php?mode=Geraeteliste'.'&'.'Service_Typ='.$Service_Typ.'&'.'Geraetetyp='.$Geraetetyp.'&'.'Geraet='.$zeile2[1].'"]'.$zeile2[1].'[/url]
                                '
;
                                
                                break ;
                                
                            }
                        


                    }

                }        
    
//echo '[/list]</div>';

echo '[/list][/list][/list][/list]';


Die verschachtelung der 2 while Schleifen macht dem Datenbankserver sehr zu schaffen, das ganze soll ein Menü generieren (macht es auch) aber es ist furchtbar langsam.

Da kann man bestimmt noch viel optimieren aber da hören meine Kenntnisse auf und ich brauch eure Hilfe.


Also die erste while Schleife holt alle Zeilen aus der Tabelle Eichler_PG die bei der Spalte KlassenName den Wert haben den ich aus einer $_GET Variable einführe.

Wenn so einer gefunden wurde wird das JOIN Eichler_Detail + Eichler_Options durchgerammelt und wenn da dann das Feld Kategorie (hier $zeile[11] dem $Service_Typ (auch $_GET) entspricht kommt die Ausgabe).



Die Tabellen haben folgende Struktur:

Eichler_Detail
Code:
   	 Field   	Type  	Collation  	Attributes  	Null  	Default  	Extra  	Action
	 DetailID  	int(100) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 OptionID  	int(100) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 PGID  	int(100) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Preis DM  	decimal(100,0) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Preis EUR  	decimal(100,0) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Best-Nr  	varchar(100) 	latin1_german1_ci 	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Aenderung  	timestamp 	  	  	Yes  	0000-00-00 00:00:00  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext

Eichler_Klassen
Code:
   	 Field   	Type  	Collation  	Attributes  	Null  	Default  	Extra  	Action
	 KlassenID  	int(255) 	  	UNSIGNED 	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 KlassenName  	varchar(255) 	latin1_german1_ci 	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Reparatur  	char(2) 	latin1_german1_ci 	  	No  	on  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Hochrüstung  	char(2) 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Miete  	char(2) 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Gebrauchtgerät  	char(2) 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Ersatzteile  	char(2) 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
Eichler_Option:
Code:
   	 Field   	Type  	Collation  	Attributes  	Null  	Default  	Extra  	Action
	 OptionID  	varchar(100) 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 BennenungD  	longtext 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 BenennungE  	longtext 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Aenderungsdatum  	timestamp 	  	  	Yes  	0000-00-00 00:00:00  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 Kategorie  	text 	latin1_german1_ci 	  	No  	  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
Eichler_PG
Code:
   	 Field   	Type  	Collation  	Attributes  	Null  	Default  	Extra  	Action
	 PGID  	int(255) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 PGName  	varchar(255) 	latin1_german1_ci 	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext
	 KlassenID  	int(255) 	  	  	No  	0  	  	Change 	Drop 	Primary 	Index 	Unique 	Fulltext

Ich hoffe jemand hat Lust und Zeit mir zu helfen.

Lg

Uhu
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.05.2005, 10:16  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

also wenn du performance ansprichst würde ich als erstes mal folgendes versuchen:



select * from
Warum soll ich nicht SELECT * schreiben?
http://www.php-faq.de/q/q-sql-select.html


beschränke dich auf die Spalten die du brauchst und sonst nix.

ansonsten, jenachdem wie viel drinsteht, es ist teilweise "schneller" alles aus der DB zu holen (weil querys in schleifen vermieden werden sollten)
und dann php-seitig das aussortieren was gebraucht wird.

ausserdem könntest du deinen ersten quellcode mal editeren und anstatt [code]-tags, die [php]-tags benutzen, das macht es gleich übersichtlicher

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 30.05.2005, 10:35  
Gast
 
Beiträge: n/a
Standard

danke für die Antwort. Habe das * mal ersetzt. Es bringt was aber nicht wirklich viel (ca 10% schneller)

Wie würde das denn aussehen wenn ich die kompletten Datenbanken erstmal raushole und dann auswähle was ich brauche?
  Mit Zitat antworten
Alt 30.05.2005, 12:52  
Gast
 
Beiträge: n/a
Standard

habe es selbst gelöst mit folgendem SQL query:

PHP-Code:
<?php

$anfrage2
="SELECT * FROM Eichler_PG epg INNER JOIN Eichler_Klassen ek ON ek.KlassenID = epg.KlassenID INNER JOIN Eichler_Detail ed INNER JOIN Eichler_Option eo ON eo.OptionID = ed.OptionID ON epg.PGID = ed.PGID WHERE KlassenName = '".$Geraetetyp."' AND Kategorie ='".$Service_Typ."' GROUP BY epg.PGID ORDER BY epg.PGName";

?>
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] If in einer While schleifen RedDragon PHP Tipps 2008 16 20.07.2008 20:02
HTML und while schleifen. vale PHP Tipps 2006 1 17.06.2006 21:08
while schleife in einer while schleife beim tmpl-sys PHP Tipps 2005-2 0 27.07.2005 15:07
While Schleifen Problem PHP Tipps 2005 9 22.05.2005 22:35
While Schleifen PHP Tipps 2005 9 22.04.2005 13:04
while schleifen ($dsatz=mysql_fetch_assoc($abfrage1) stefan-miti PHP Tipps 2004 5 23.09.2004 20:46
While schleifen problem PHP Tipps 2004 8 19.09.2004 17:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
verschachtelte while schleife, 2 while schleifen, php verschachtelte schleifen, verschachtelte schleifen php, mehrere while schleifen, zwei while schleifen, php 2 while schleifen, php verschachtelte while schleife, verschachtelte while schleife php, verschachtelte while schleifen, verschachtelte for schleife php, php verschachtelte schleife, geschachtelte while schleife, 2 while schleifen php, verschachtelte schleife php, php 2 while, php zwei while schleifen, php while verschachtelt, zwei while schleifen php, php verschachtelte while schleifen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.