SQL Abfrage Allgemein

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
posaunen
Mitglied
Beiträge: 402
Registriert: 21.04.2004 20:05

Re: SQL Abfrage Allgemein

Beitrag von posaunen »

Vielleicht würde es Sinn machen, du würdest genauer beschreiben, warum du statt der spalte mit der auto increment funktion eine eigene Nummerierung implementiert hast und ausschließlich mit dieser arbeitest / arbeiten willst.

Als sql-Laie würde ich bis dahin den Ansatz vorschlagen, eine Tebelle mit den gelöschten Datensätzen zu erstellen und bei der Neuanlage eines Datensatzes aus dieser Tabelle den Eintrag mit der niedrigsten Nummer auszulesen und dann zu löschen.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: SQL Abfrage Allgemein

Beitrag von chris1278 »

Ok das kann ich dir Erklären. In der Ersten Fassung hatte ich noch für die Eingabe der Boxnummer ein Feld im Huml generiert (was jetzt auch da ist aber nicht angezeigt wird. Da in erster Version zun anlegen der Box eine Zahl angegeben werden musste und dann entsprechend auch der Datenbank Befehl entweder insert (wenn nr nicht vorhanden) oder update (falls Eintrag vorhanden). Prinzip kannst du dir in meiner Extension Counter with ACP Menu anschauen. Da funktioniert dies ähnlich mit den texten die man im ACP anlegen kann.

In der aktuell neuen Fassung bräuchte ich diese Zeile mit den Box Nummern eigentlich nicht mehr. Die Sortierung könnte ich auch mittes der index spalte vornehmen.

Aber mein Gedanke war folgender:

Es geht sich hier um die Reihenfolge. Bei den Forenkategorien z.B. sind ja die Pfeile mit denen man die Kategorie hoch bzw. runter bewegen kann. So etwas hatte ich mir auch für meine Extension überlegt.

Meine Überlegung geht in folgende Richtung:

Beim Drücken z.B. hoch wird die Box Nummer der zu nach oben verschiebenden Zeile und der zu tauschender Zeile jeweils in einen Datenbank Eintrag geschrieben und im weiteren verlauf dann entsprechende vertauscht. Soweit so gut Das sollte auch ohne Probleme machbar sein.

Aber hier sehe ich ein Problem wenn folgendes Auftritt: Wenn man eine Zeile zwischendurch löscht wird ja auch diese Box Nummer gelöscht und das würde wieder Probleme beim Verschieben geben. Da ich die Boxnummer an sich nirgends ausgebe wäre auch durchaus möglich diese mit einem SQL Befehl (so denn es solch einen gibt) neu durchzunummerieren. Sprich wenn 6 Einträge mit 1-6 Nummeriert sind und Beispielsweise der Eintrag mit der Nummer 3 gelöscht wird das dann mit einem SQL Befehl die Nummerierung erneuert wird von 1-5 (Weil 3 weg ist wären ja nur noch 5 Einträge da.

@edit

Also ich hab ne Möglichkeit gefunden aber die umsetzung mittels php funktioniert leider nicht so richtig.

Wenn ich das im phpmyadmin ausführe funktiniert das so wie gewünscht:

Code: Alles auswählen

SET @a = 0;
UPDATE phpbb_chris1278_social SET var_social_box_nr = (@a := @a +1);
ALTER TABLE phpbb_chris1278_social;

Allerdings wenn ich das wie die anderen update und delete anweisungen in meinen db controller einfüge um das als funktion aufzurufen klappt das nicht. Hier das was ich als versuch geschrieben habe:

Code: Alles auswählen


public function resort_boxnr()
	{
		$sql ='SET @a = 0;
		UPDATE ' . $this->social_table. ' SET var_social_box_nr = (@a := @a +1);
		ALTER TABLE ' . $this->social_table;

		$sql		= $this->db->sql_query($sql);
	}
evt. hätte jemand einen Vorschlag wie man oberen code so einfügt das der als sql querry bearbeitet wedern kann.

@edit2

So hab zwei wege als lösung gefunden und frage hier mal an die profies welcher der bessere weg wäre:

Weg 1:

Code: Alles auswählen

$sqlary = [

		"SET @a = 0;",

		"UPDATE  " . $this->social_table .  " SET var_social_box_nr = (@a := @a +1);",
		];

		foreach ($sqlary as $sql)
		{
			$this->db->sql_query($sql);
		}
weg2:

Code: Alles auswählen

$sql = 'SET @a = 0';

		$sql		= $this->db->sql_query($sql);

		$sql ='UPDATE ' . $this->social_table. ' SET var_social_box_nr = (@a := @a +1)';

		$sql		= $this->db->sql_query($sql);*/
Antworten

Zurück zu „Coding & Technik“