php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 18-08-2009, 14:55
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ja, wenn du das Statement alleine betrachtest, schon. Aber sortier mal die erste Row ganz ans Ende der Tabelle. Bei 1000 Datensätzen führst du dieses Statement 999 Mal aus.
Also doch lieber nicht von der DB sortieren lassen!? ^^
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #17 (permalink)  
Alt 18-08-2009, 15:05
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von nichtsooft Beitrag anzeigen
Also doch lieber nicht von der DB sortieren lassen!? ^^
Doch, schon, aber mit der Schiebevariante, nicht mit der Austauschvariante von combie, es sei denn, es sind (und bleiben) nur 10 Datensätze, dann ist es wurscht.
Mit Zitat antworten
  #18 (permalink)  
Alt 18-08-2009, 15:15
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Also (pseudo) nach oben verschieben:

1) UPDATE eintrag WHERE priority = (meinopfer - 1) SET priority = priority+1 LIMIT 1
2) UPDATE meinopfer SET priority-1 LIMIT 1

(pseudo) nach unten verschieben:

1) UPDATE eintrag WHERE priority = (meinopfer +1) SET priorty-1 LIMIT 1
2) UPDATE meinopfer SET priority+1 LIMIT 1

SRY wegen pseudo... Das Problem hierbei ist: Wie bekomme ich nach den Anweisungen wieder eine schöne incremente reihenfolge (1,2,3,....,77,...) hin!?
__________________
WHILE (!$asleep) { $sheep++; }

Geändert von nichtsooft (18-08-2009 um 15:19 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 18-08-2009, 15:29
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn du sowieso nur jeweils einen Schritt nach oben oder unten schiebst, dann kannst du auch ohne Bedenken combies Variante benutzen. Wenn die Sprünge aber größer sein können (Beispiel unten), solltest du schieben.

Beispiel:
a 1
b 2
c 3
d 4
e 5
f 6

b soll von Stelle 2 ($from) hinter das d, also auf Stelle 5 ($to) rutschen:

update tabelle set pos = pos + 1 where pos >= $to;
a 1
b 2
c 3
d 4
e 6
f 7

update tabelle set pos = $to where pos = $from;
a 1
b 5
c 3
d 4
e 6
f 7

update tabelle set pos = pos - 1 where pos > $from
a 1
b 4
c 2
d 3
e 5
f 6

bzw. a c d b e f

Der Vorteil ist, egal, wie weit du springst, es sind immer genau diese 3 updates. Bei der Austauschvariante sind es für nen Sprung um x Stellen auch x Updates. Jetzt musst du entscheiden, was in deinem Falle günstiger ist.

PS: Für bessere Performance sollte pos (oder bei dir priority) unbedingt indiziert werden (BTree Index, also ganz normal).

Geändert von AmicaNoctis (18-08-2009 um 15:44 Uhr)
Mit Zitat antworten
  #20 (permalink)  
Alt 18-08-2009, 15:51
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Hab da maximal 20 Datensätze drinnen und will eigentlich immer nur um einen wert (nach oben/unten) verschieben können! Sonst müsste ich wieder ein drag&drop-dingens einbauen, damit das ganze was gleich schaut! :-(

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wenn du sowieso nur jeweils einen Schritt nach oben oder unten schiebst, dann kannst du auch ohne Bedenken combies Variante benutzen.
Heisst das jetzt mein pseudo-code ist richtig!? *fg*
Und wie bekomme ich die Werte nachher wieder sortiert (0,1,2,3,4...)?
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #21 (permalink)  
Alt 18-08-2009, 15:55
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

dann kannst du auch ohne Bedenken combies Variante benutzen:
Code:
UPDATE tabelle 
     SET priority = $x + $y - priority 
     WHERE priority IN ($x, $y)
Mit Zitat antworten
  #22 (permalink)  
Alt 18-08-2009, 15:59
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
dann kannst du auch ohne Bedenken combies Variante benutzen:
Code:
UPDATE tabelle 
     SET priority = $x + $y - priority 
     WHERE priority IN ($x, $y)

Wofür steht hier $x und $y !?
$x = meinopfer, $y = folgender/vorangehender Eintrag!?
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #23 (permalink)  
Alt 18-08-2009, 16:01
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Klickst du hier: Array Sortieren mal anders...
Mit Zitat antworten
  #24 (permalink)  
Alt 20-08-2009, 01:02
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Irgendwie würfelt mir dieser Sortievorgang alles durcheinandern! ^^

PHP-Code:
    //// Sorting DOWN; Means that the actual item changes priority with the following one...
    
$step1 "UPDATE site_bloxx SET priority = ".$this_blx['priority']." WHERE priority > ".$this_blx['priority']." AND group_id = ".$this_blx['group_id']." LIMIT 1";
    
mysql_query($step1) or header("Location: index.php?notice=err&fwddata=back");
    
$step2 "UPDATE site_bloxx SET priority = ".($this_blx['priority'] + 1)." WHERE id = ".$this_blx['id']." AND group_id = ".$this_blx['group_id']." LIMIT 1";
    
mysql_query($step2) or header("Location: index.php?notice=err&fwddata=back");

    
//// Sorting UP; Means that the actual item changes priority with the previous one...
    
$step1 "UPDATE site_bloxx SET priority = ".$this_blx['priority']." WHERE priority < ".$this_blx['priority']." AND group_id = ".$this_blx['group_id']." LIMIT 1";
    
mysql_query($step1) or header("Location: index.php?notice=err&fwddata=back");
    
$step2 "UPDATE site_bloxx SET priority = ".($this_blx['priority'] - 1)." WHERE id = ".$this_blx['id']." AND group_id = ".$this_blx['group_id']." LIMIT 1";
    
mysql_query($step2) or header("Location: index.php?notice=err&fwddata=back"); 
Ich würde es auch mit combies Variante machen, aber die Check ich nach wie vor nicht! ^^
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #25 (permalink)  
Alt 20-08-2009, 01:08
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das ist völlig logisch, denn von LIMIT 1 hab ich nie was gesagt
Mit Zitat antworten
  #26 (permalink)  
Alt 20-08-2009, 01:35
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
aber die Check ich nach wie vor nicht!
Ist es denn wirklich so schwierig?
Male es dir auf Papier auf.
Rechne es mit 2 verschiedenen Werten durch.

Das ist alles gar nicht so schwer.....
__________________
Wir werden alle sterben
Mit Zitat antworten
  #27 (permalink)  
Alt 20-08-2009, 17:43
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Das ist völlig logisch, denn von LIMIT 1 hab ich nie was gesagt
Wenn ich kein "Limit 1" rein schmeisse, erhöht er mir alle nachfolgenden Werte um 1 und ich muss dann nochmal eine "glättungsfunktion" die mir die Werte wieder auf incerement bringt drüber laufen lassen! ^^
Das problem ist nämlich dass ich 3 Typen von einträgen habe-> id, group_id, name, link, priority und ich ja immer nur eine von den Gruppen (also deren Einträge) verändern will.... Daher auch das "WHERE group_id....".

Zitat:
Zitat von combie Beitrag anzeigen
Ist es denn wirklich so schwierig?
Male es dir auf Papier auf.
Rechne es mit 2 verschiedenen Werten durch.
Ich check das IN() nicht! Hab mir zwar schon durchgelesen was es macht und so, scheint mir aber hier nicht irgendwie passen; Oder ich hab's einfach nicht geblickt!
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #28 (permalink)  
Alt 20-08-2009, 17:54
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
, scheint mir aber hier nicht irgendwie passen;
Welche Sorgen plagen dich?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #29 (permalink)  
Alt 25-08-2009, 10:59
nichtsooft
 Registrierter Benutzer
Links : Onlinestatus : nichtsooft ist offline
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 385
nichtsooft ist zur Zeit noch ein unbeschriebenes Blatt
nichtsooft eine Nachricht über ICQ schicken
Standard

Soooo! Sry dass es so lange gedauert hat! Trotz Kurzurlaub hab ich's noch immer nicht! Daher ist der Thread leider noch aktuell...

$x = Die Priorität meines aktuellen Elements (z.B.: 4)
$y = Die Priorität des Folgeelements (=> 5)

Zitat:
UPDATE tabelle
SET priority = $x + $y - priority
WHERE priority IN ($x, $y)
Würde heißen -> Wegen dem IN() hab ich 2 Updates...:
1. Lauf: SET priority = 4 + 5 - 5 WHERE priority IN (4,5) => priority = 4
2. Lauf: SET priority = 4 + 5 - 4 WHERE priority IN (4,5) => priority = 5

Es hätte sich also nichts geändert...^^ Ich müsste das "IN ()" oder besser noch die Menge darin verkehrt rum angeben, dann sollte es für eine Richtung funktionieren (aufwärts/abwärts)...
Aber was ist mit der anderen Richtung!?
__________________
WHILE (!$asleep) { $sheep++; }
Mit Zitat antworten
  #30 (permalink)  
Alt 25-08-2009, 11:59
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Würde heißen -> Wegen dem IN() hab ich 2 Updates...:
1. Lauf: SET priority = 4 + 5 - 5 WHERE priority IN (4,5) => priority = 4
2. Lauf: SET priority = 4 + 5 - 4 WHERE priority IN (4,5) => priority = 5
Zitat:
Es hätte sich also nichts geändert
Doch doch !!
Wie du selber geschrieben hast, wird bei 1 die 5 zur 4 und bei 2 die 4 zur 5.
Und das tuts in beide Richtungen!
Nichts ändern, einfach nur verwenden.
__________________
Wir werden alle sterben

Geändert von combie (25-08-2009 um 12:02 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array sortieren Oelpfanne PHP Developer Forum 15 11-04-2007 15:52
Array durch anderes Array sortieren Johny PHP Developer Forum 3 08-07-2006 01:06
Ausgabe anders sortieren phpscripter PHP Developer Forum 4 11-11-2005 13:08
array sortieren lx-club PHP Developer Forum 2 20-08-2004 13:28
array sortieren, gleich wie ein anderes array Viper1985 PHP Developer Forum 5 06-11-2003 14:38

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:28 Uhr.