php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.02.2012, 22:43  
Benutzer
 
Registriert seit: 30.01.2012
Beiträge: 51
PHP-Kenntnisse:
Anfänger
highway82 ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] Insert dauert sehr lange

Hallo zusammen,

habe eine kleine Frage zu meinem Code (Das File wird per include eingebunden):
PHP-Code:
<?php
$users_has_guardservices
="
SELECT 
users.name
FROM users
LEFT JOIN plan ON plan.users_id = users.id
LEFT JOIN guardsevices ON plan.guardservices_gs_id = guardservices.gs_id
LEFT JOIN events ON guardservices.events_event_id = events.event_id
LEFT JOIN functionnums ON guardservices.functionnums_num_id = functionnums.num_id
LEFT JOIN functions ON functionnums.functions_func_token = functions.func_token
WHERE functions.func_token= '"
.$row1->func_token."'
AND plan.cell_id="
.$f."
AND events.event_id="
.$row->event_id."
;
"
;
$query_users_has_guardservices mysql_query($users_has_guardservices) or die("Anfrage nicht erfolgreich");
$result_plan mysql_fetch_row($query_users_has_guardservices);

if(
$_GET['action']=="del"){
    
$t1 $_GET['user_id'];
    
$t2 $_GET['gs_id'];
    
$t3 $_GET['cell_id'];

    
mysql_query("DELETE FROM plan WHERE users_id = $t1 AND guardservices_gs_id = $t2 AND cell_id = $t3;");
    
}
if(
$_GET['action']=="add"){
    
$t1 $_GET['user_id'];
    
$t2 $_GET['gs_id'];
    
$t3 $_GET['cell_id'];

    
mysql_query("INSERT INTO plan (plan_id, users_id, guardservices_gs_id, cell_id)VALUES('', $t1, $t2, $t3);");
    
}

if(empty(
$result_plan)){
?>
<table style="width:100%;">
    <tr>
        <td style="width: 20px;" class="entry">
        <?php
    

        ?>
        </td>
        <td style="vertical-align:middle; text-align:center;">
            <a href="" class="1">
                <a href="insert.php?event_id=<?=$row->event_id?>&func_token=<?=$row1->func_token?>&cell_id=<?= $f?>$user_id=<?=$result_user[2];?>">---</a>
            </a>
        </td>
        <td style="width: 20px; text-align: right;" class="entry">
            <!--<a href="insert.php?gs_id=<?=$row1->gs_id?>&user_id=<?=$result_user[2];?>&cell_id=<?= $f?>"><img src="images/add.png" alt="add"></a>-->
            <a href="?action=add&user_id=<?=$result_user[2];?>&gs_id=<?=$row1->gs_id?>&cell_id=<?= $f?>"><img src="images/add.png" alt="delete"></a>
        </td>
    </tr>
</table>
<?php
}else{
?>
<form action="delete.php" method="post">
    <table style="width:100%;">
    <tr>
        <td style="width: 20px;" class="entry">
        <?php
        ?>
        </td>
        <td style="vertical-align:middle; text-align:center;">
            <?php
                
echo $result_plan[0];
            
?>
        </td>
        <td style="width: 20px; text-align: right;" class="entry">
            <!--<a href="delete.php?gs_id=<?=$row1->gs_id?>&user_id=<?=$result_user[2];?>&cell_id=<?= $f?>"><img src="images/delete.png" alt="delete"></a>-->
            <a href="?action=del&user_id=<?=$result_user[2];?>&gs_id=<?=$row1->gs_id?>&cell_id=<?= $f?>"><img src="images/delete.png" alt="delete"></a>

        </td>
    </tr>
    </table>
</form>
<?php
}
?>
(Falls noch Code fehlt einfach melden)

Wenn ich den Button "delete" drücke erhalte ich relativ schnell eine Antwort.
Der Button "add" erfüllt zwar auch seine Aufgabe (-> Einfügen von einem Namen), allerdings dauert es sehr sehr lang.

Hat jemand von euch einen Tipp, wie ich den "INSERT" schneller hinbekomme.
Auch würde ich gern als Tipp wissen ob der Code einigermaßen Sinnvoll aufgebaut ist oder soll ich INSERT und DELETE ausgliedern?

Grüße Dominik
highway82 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 13.02.2012, 22:59  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Also ich würde mal behaupten, dass das an der riesigen MySQL-Abfrage zu beginn liegt, die wird vermutlich einiges an Resourcen fressen und beim 2. Aufruf das Ergebnis noch im Cach haben.
Das Insert sollte, falls die Tabelle nicht ganz verrückt aufgebaut ist recht schnell gehen,

Unter Umständen hilft es mal, wenn du dir immer wieder die Zeiten ausgeben lässt, die das Skript bis dahin schon gelaufen ist, dann sollte man recht schnell erkennen, wo er viel Zeit lässt.
http://www.php.net/manual/de/function.microtime.php
ChrisvA ist gerade online   Mit Zitat antworten
Alt 13.02.2012, 23:38  
Benutzer
 
Registriert seit: 30.01.2012
Beiträge: 51
PHP-Kenntnisse:
Anfänger
highway82 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

vielen Dank für die Antwort.
Also es sieht so aus.
Kommentiere ich beide "Funktionen" aus, werden die Tabellen sehr schnell angezeigt.
Wird "delete" auch dazu genommen, ändert sich nicht viel an der Geschwindigkeit und die Anzeige erfolgt sehr zügig.

Sobald ich das "insert" dazu nehme oder als einzige Funktion ausgebe, dauert das laden der Seite sehr lange.

Hat jemand anderes noch eine idee?

Aufbau DB:
highway82 ist offline   Mit Zitat antworten
Alt 14.02.2012, 02:35  
Benutzer
 
Benutzerbild von trollface
 
Registriert seit: 24.09.2011
Beiträge: 63
PHP-Kenntnisse:
Fortgeschritten
trollface befindet sich auf einem aufstrebenden Ast
Standard

Aufgrund der Spaltennamen rate ich jetzt einfach mal.

* Die Tabelle 'plan' hat viele Indizes.
* Die Tabelle hat viele Einträge.

Für jeden INSERT muss er die vielen Indizes aktualisieren. Das dauert bei vielen Einträgen natürlich auch entsprechend lange.

Lösung:
* unnötige Indizes entfernen (z.B. Index mit kleiner Kardinalität)
* Tabelle aufteilen (Normalität)
trollface ist offline   Mit Zitat antworten
Alt 14.02.2012, 09:21  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

darüberhinaus :

unnötige Semikolons am Ende der SQL-Abfragen löschen - die brauchts von php aus nicht
lass die Spalte plan_id ganz raus beim insert - du weist ihr '' zu, was nicht mal ein gültiger Integerwert ist, wo diese Spalte WAHRSCHEINLICH der Primärschlüssel und demzufolge Integer + not Null + auto_increment ist.
probier es mal so:
PHP-Code:
$do=mysql_query("INSERT INTO plan ( users_id, guardservices_gs_id, cell_id) VALUES ($t1, $t2, $t3)"); 
und dann, dein größter Schnitzer, du lässt mysql_query einfach "laufen" - ohne eine Rückgabe entgegen zu nehmen, anhand der du den Erfolg deiner Schreiboperation überprüfen kannst.
ich hab daher in meinem Code-Schnipsel das Ergebnis des Inserts mal der Variable $do zugewiesen. Und die kann man dann prüfen (FALSE = Fehler .....)
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   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
INSERT INTO funktioniert nicht Schorschologe Datenbanken 5 25.01.2011 16:02
[Erledigt] mehrfaches INSERT über PHP drzwockel PHP Tipps 2010 10 10.08.2010 11:03
Problem mit Mysql Left Join Ambfrage pro-tech Datenbanken 11 22.05.2010 10:59
[Erledigt] Abfrage Ergebins in INSERT weiterverwenden kalppt nicht seinereiner Datenbanken 6 22.01.2009 23:31
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
mysql dump einspielen (ohne phpmyadmin) PHP Tipps 2005-2 6 18.06.2005 21:50
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
dynamisches MENÜ aus db lesen.probleme mit SUBid !! PHP Tipps 2005 26 24.03.2005 18:53
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
Zeile einfach überspringen bei Unique-Verletzung tapferesschneiderlein Datenbanken 6 03.09.2004 14:29
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php insert into dauert ewig, insert in datenbank dauert sehr lange, insert braucht ewig, mysql insert dauert lange

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:09 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