php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.05.2005, 15:43  
Gast
 
Beiträge: n/a
Standard PEAR::DB Optimierung für Query und Arrayfüllung?

Hi! Ich hab hier ein bisschen Code. Nen limitQuery der die letzten 5 News aussliest und in ein multi array schreibt. früher hab ich bei mysql_fetch array noch ein list() eingebaut um jeder Spalte ne eigene Variable zu zuordnen. vielleicht hilfts.

Hat jemand ne Idee wie ich so ne Typische Abfrage und Füllung optimieren kann? Im Query muss ich die Felder angeben ist klar. Aber später muss hingehen und muss nochmals für alle das in ein array schreiben. Geht das schneller, kürzer?...Direkter?

Nebenbei noch weiß jemand den Unterschied zwischen FetchInto und FetchRow?

PHP-Code:
<?php
$res 
$db->limitQuery('SELECT id, date, title, editor FROM WHERE ORDER BY date DESC'051);
if (
PEAR::isError($db)) {
    die(
$db->getMessage());
} while (
$row $res->fetchrow()) {
    
$i++;
    
$news[$i]['id'] = $row['id'];
    
$news[$i]['date'] = $row['date'];
    
$news[$i]['title'] = $row['title'];
    
$news[$i]['editor'] = $row['editor'];

?>
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 17.05.2005, 16:00  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

Ich habe zwar noch nie mit der PEAR:B Klasse gearbeitet, aber eins fällt mir an deinem code sofort auf:

PHP-Code:
<?php $i++; ?>
wo wird $i definiert? Du kannst keine Variable inkrementieren, wenn es sie nicht gibt. Ansonsten kannst du auch schreiben:

PHP-Code:
<?php
$res 
$db->limitQuery('SELECT id, date, title, editor FROM WHERE ORDER BY date DESC'051); 
if (
PEAR::isError($db)) { 
    die(
$db->getMessage()); 
}
while (
$row $res->fetchrow()) { 
    
$news[] = $row

?>
Buhmann ist offline  
Alt 17.05.2005, 17:24  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
 $news
[] = $row
?>
Hab ichs doch gewusst das das besser geht. Danke dafür das erspart mir nen Haufencodezeilen. Werd jetzt einiges dadurch ersetzen und in Zukunft so handhaben.

PHP-Code:
<?php
$i
++;
?>
Ja sowas ist mir auch mal durch den Kopf gegangen aber es geht wirklich.
ich starte wie hier ne while schleife und setzte $i++. Wenn ich während der Schleife immer echo mache mit nem 5 Zeilen Query dann hab ich 12345 als ausgabe.
echo am Ende der Schleife macht 5.
Ist ja nicht allzu aufwändig das mal nachzutestn.
 
Alt 17.05.2005, 18:50  
Gast
 
Beiträge: n/a
Standard Re: PEAR::DB Optimierung für Query und Arrayfüllung?

Zitat:
Zitat von ex³
Hat jemand ne Idee wie ich so ne Typische Abfrage und Füllung optimieren kann?
Deinem Script ist zu entnehmen, daß Du fetch_assoc und ein numerisch/assoziativ indiziertes Ergebnisarray haben willst.

Du suchst also das:
http://pear.php.net/manual/en/packag...mon.getall.php

PHP-Code:
<?php
$array 
$db->getAll('SELECT id, date, title, editor FROM tabelle WHERE die=das ORDER BY date DESC');
?>
 
Alt 17.05.2005, 19:06  
Gast
 
Beiträge: n/a
Standard

Aber eben noch mit der Funktionalität von limitQuery(); das sieht ja nicht bei jeder Datenbank gleich aus.
 
Alt 17.05.2005, 20:17  
Gast
 
Beiträge: n/a
Standard

DB oder DBMS?

limitQuery()
"It is an emulation of the MySQL LIMIT option."
 
Alt 17.05.2005, 20:30  
Gast
 
Beiträge: n/a
Standard

GetAll ist klar nur ich dachte halt es ist vielleicht geschickter ne Funktion zu nehmen, welche darauf ausgelegt ist. GetAll wollte ich nicht extra beschränken
 
Alt 17.05.2005, 20:47  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von meikel
DB oder DBMS?

limitQuery()
"It is an emulation of the MySQL LIMIT option."
Na, was wird wohl gemeint sein?

Und limitQuery() funktioniert halt nicht nur mit mysql - die Funktionsweise soll nur so sein.

Bei Firebird wird daraus
Zitat:
$query = preg_replace('/^([\s(])*SELECT/i',
"SELECT FIRST $count SKIP $from", $query);
bei oracle
PHP-Code:
<?php
...
function 
modifyLimitQuery($query$from$count$params = array())
    {
        
// Let Oracle return the name of the columns instead of
        // coding a "home" SQL parser

        
if (count($params)) {
            
$result $this->prepare("SELECT * FROM ($query) "
                                     
'WHERE NULL = NULL');
            
$tmp =& $this->execute($result$params);
        } else {
            
$q_fields "SELECT * FROM ($query) WHERE NULL = NULL";

            if (!
$result = @OCIParse($this->connection$q_fields)) {
                
$this->last_query $q_fields;
                return 
$this->oci8RaiseError();
            }
            if (!@
OCIExecute($resultOCI_DEFAULT)) {
                
$this->last_query $q_fields;
                return 
$this->oci8RaiseError($result);
            }
        }

        
$ncols OCINumCols($result);
        
$cols  = array();
        for ( 
$i 1$i <= $ncols$i++ ) {
            
$cols[] = '"' OCIColumnName($result$i) . '"';
        }
        
$fields implode(', '$cols);
        
// XXX Test that (tip by John Lim)
        //if (preg_match('/^\s*SELECT\s+/is', $query, $match)) {
        //    // Introduce the FIRST_ROWS Oracle query optimizer
        //    $query = substr($query, strlen($match[0]), strlen($query));
        //    $query = "SELECT /* +FIRST_ROWS */ " . $query;
        //}

        // Construct the query
        // more at: [url]http://marc.theaimsgroup.com/?l=php-db&m=99831958101212&w=2[/url]
        // Perhaps this could be optimized with the use of Unions
        
$query "SELECT $fields FROM".
                 
"  (SELECT rownum as linenum, $fields FROM".
                 
"      ($query)".
                 
'  WHERE rownum <= '. ($from $count) .
                 
') WHERE linenum >= ' . ++$from;
        return 
$query;
    }
...
?>
usw. usw.

Wenn also die Benutzung von PearB irgendeinen Sinn haben soll, sollte das LIMIT aus der Abfrage rausbleiben.
 
 


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
Variablen in Query automatisch escapen Maho88 PHP Tipps 2007 10 31.07.2007 08:42
find den Fehler im Query nicht !? madSoul Datenbanken 2 09.11.2006 12:19
Optimierung von einem MySQL Query Christof Moser Datenbanken 2 17.08.2006 19:34
Probleme mit einer query tinchen Datenbanken 20 30.05.2006 19:39
PHP/MySQL: Query wird nicht ausgeführt Zergling-new Tutorials 5 09.05.2006 23:16
query *confused* Datenbanken 4 14.01.2006 12:51
query r�cksetzen? Promaetheus PHP Tipps 2007 15 01.12.2005 13:53
Query, was aus einer Tabelle mehrere Summen rausholt Datenbanken 3 14.09.2005 16:45
Geht das mit nur einem Query? Bouni Datenbanken 3 14.09.2005 09:08
PEAR::DB LimitQuery was ist Count? PHP Tipps 2005-2 3 06.06.2005 18:02
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
[Erledigt] mysql_free_result und Frage zur Optimierung Datenbanken 3 21.10.2004 12:10
select query durch if anweisungen splitten Datenbanken 6 06.09.2004 13:46
mysql Fehler - query was empty Anuschka Datenbanken 2 01.09.2004 00:28
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php optimieren oracle abfrage, optimierung buhmann skript, pear db query array

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