SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 15.11.2010, 15:45:29
gepard gepard ist offline
Anfänger
 
Registriert seit: Feb 2003
Beiträge: 3
"ORDER BY NULL" bei kombinierten Range Abfragen

Hallo Miteinander!

Für eine Bilderdatenbank habe ich mich am Nested Set Modell orientiert und dieses so erweitert, das ich nicht nur Bäume, sondern auch komplexere Graphen abbilden kann. Hierzu ist es notwendig statt einer einzelnen Ergebnismenge, mehrere Einzelmengen abzufragen:

Beispiel:
Code:
SELECT * FROM `images`
WHERE (`left` BETWEEN 10 AND 20)
OR (`left` BETWEEN 30 AND  40) LIMIT 50
Das nur als Vorgeschichte und Rahmenbedingung. Mein eigentliches Problem ergibt sich aus der Tatsache, das die einzelnen Bilder über einen Zahlenwert gewichtet werden (`vote`) und ich die Ergebnismenge nach dieser Gewichtung sortiert haben möchte.
Code:
ORDER BY `vote`
funktioniert zwar, ist aber auf Grund von teilweise mehreren Millionen Zeilen die bei jeder Abfrage zu sortieren wären nicht praktikabel. Also war mein Ansatz über
Code:
ORDER BY NULL
die interne Sortierung der Tabelle auszunutzen, die zuvor mit
Code:
ALTER TABLE `images`  ORDER BY `vote` ASC
entsprechen vorbereitet wurde.

Leider bekomme ich eine Ergebnismenge in der Form:
Code:
left   vote
 10     1
 11     3
 12     5
 30     2
 31     4
 32     6
statt

Code:
left   vote
 10     1 
 30     2
 11     3
 31     4
 12     5
 32     6
Hat vielleicht jemand eine Idee, wie ich dieses Problem möglichst elegant gelöst bekomme?


Gruß
Frank
Mit Zitat antworten
  #2  
Alt 15.11.2010, 19:06:45
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: "ORDER BY NULL" bei kombinierten Range Abfragen

Hallo Frank,

die Idee mit dem

Zitat:
ALTER TABLE `images` ORDER BY `vote` ASC;
ist zwar interessant, aber auch das Handbuch sagt dazu...

Zitat:
..Wenn Sie diese
Option nach umfangreicheren Änderungen in der Tabelle verwenden, können Sie die Leistung unter Umständen steigern....
Letztlich ist es so, nur mit Hilfe des ORDER BY garantiert Dir die Datenbank die gewünschte Sortierung.

Mit ORDER BY NULL wird der Datenbank mitgeteilt NICHT zu sortieren, mehr nicht soviel ich weiß.

Ob eine SQL-Abfrage mit oder ohne ORDER BY performant ist, hängt von vielen Faktoren ab. Wesentlich sind aber vorhandene und passende Indices auf die Tabelle.


Wie sieht den die Tabellenstruktur der Tabelle IMAGES aus?

Bitte mal...

Code:
mysql>SHOW CREATE TABLE images;
ausführen und das Ergebnis zeigen.


Führe zudem mal folgenden Befehl (EXPLAIN) aus:

Code:
EXPLAIN
SELECT * FROM `images`
 WHERE (`left` BETWEEN 10 AND 20)
    OR (`left` BETWEEN 30 AND  40) 
 ORDER BY `vote`
LIMIT 50;
Beispiel EXPLAIN..

Code:
mysql> EXPLAIN SELECT * FROM kunde;
+----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+
| id | select_type | table | type   | possible_keys | key  | key_len | ref  | rows | Extra               |
+----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+
|  1 | SIMPLE      | kunde | system | NULL          | NULL | NULL    | NULL | 0    | const row not found |
+----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+
1 row in set (0.19 sec)

mysql>
Das wichtigste wäre mal der EXPLAIN. Bitte sauber formatieren, sonst kann man ihn nicht richtig lesen.

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Query/DB-Optimierung Phaltôn MySQLi/PDO/(MySQL) 14 20.12.2008 23:56:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:32:14 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt