Helpdesk
Menschen Wissenschaft Politik Mystery Kriminalfälle Spiritualität Verschwörungen Technologie Ufologie Natur Umfragen Unterhaltung
weitere Rubriken
PhilosophieTräumeOrteEsoterikLiteraturAstronomieHelpdeskGruppenGamingFilmeMusikClashVerbesserungenAllmysteryEnglish
Diskussions-Übersichten
BesuchtTeilgenommenAlleNeueGeschlossenLesenswertSchlüsselwörter
Schiebe oft benutzte Tabs in die Navigationsleiste (zurücksetzen).

Programmieren: Hilfe & Austausch

920 Beiträge ▪ Schlüsselwörter: Programm, Code, Html ▪ Abonnieren: Feed E-Mail

Programmieren: Hilfe & Austausch

06.02.2013 um 04:47
Hab grade vor kurzem einen Satz gelesen:

"Wir schreiben heute Programme die wir nicht mehr verstehen"

Ging dabei um komplexe Algorithmen die aus gegebenen Informationen Resultate erzeugen und das ganze in einem Umfang der es nicht mehr ermöglicht nachzuvollziehen warum ein Programm das oder jenes gemacht hat.

Anzeige
melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 04:50
@Dr.BT_

Also wenn ich mich mit einem Prog das ich gemacht habe lange Zeit nicht beschäftige, dann brauche ich etwas Zeit im wieder rein zu kommen um das zu sehen, was an Kommentaren zwischen den Zeilen fehlt.


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 05:00
7020fc bb23b coding comment horror Original anzeigen (0,2 MB)

Ich klink mich mal aus. Wir lesen uns sicherlich nochmal.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 09:04
tc96d64 918cfa merge

Noch ein Nachtrag: die Zeiträume von (z) und (y), sowie die von (x) und (w) müssen jeweils vereinigt werden. Dann kann man die Verknüpfungen (y) und (w) löschen, so wie die Personen 2 und 3.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 11:12
Ich glaube ich hab's:

// Finde erstmal die IDs der beteiligten Gruppen, // das sind potentiell alle Gruppen in denen alle zu mergenden Autoren sind. // Die Gruppen C und D dürfen dabei sein, weil Verknüpfung (u) keine Verbindung // zu einem der beteiligten Autoren hat und weil D nur zu einem der beteiligten // Autoren eine Verbindung hat, so dass da keine zwei oder mehr Zeitspannen existieren. SELECT GroupID FROM MEMBERS WHERE AuthorID IN (1,2,3); // <-- 1,2,3 steht stellvertretend für alle beteiligten Autoren Schleife: // für Gruppe A SELECT @minDate := MIN(Since) FROM MEMBERS WHERE GroupId = A AND AuthorID IN (1,2,3) GROUP BY GroupID; SELECT @minDate := MAX(Until) FROM MEMBERS WHERE GroupId = A AND AuthorID IN (1,2,3) GROUP BY GroupID; UPDATE MEMBERS SET Since = @minDate, Until = @maxDate` WHERE AuthorID IN (1,2,3) AND GroupID = A; UPDATE MEMBERS SET AuthorID = 1 WHERE Author ID IN (1,2,3) AND GroupID = A; DELETE FROM MEMBERS WHERE AuthorID IN (2,3) AND GroupID = A; // für Gruppe B (Schleife, statt A und B und .. Variable X ein setzen) SELECT @minDate := MIN(Since) FROM MEMBERS WHERE GroupId = B AND AuthorID IN (1,2,3) GROUP BY GroupID; SELECT @minDate := MAX(Until) FROM MEMBERS WHERE GroupId = B AND AuthorID IN (1,2,3) GROUP BY GroupID; UPDATE MEMBERS SET Since = @minDate, Until = @maxDate` WHERE AuthorID IN (1,2,3) AND GroupID = B; UPDATE MEMBERS SET AuthorID = 1 WHERE Author ID IN (2,3) AND GroupID = B; DELETE FROM MEMBERS WHERE AuthorID IN (2,3) AND GroupID = B; // zuletzt alle überflüssigen Autoren löschen DELETE FROM AUTHORS WHERE ID IN (2,3)


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 14:29
Ja! Es funktioniert! :D Heureka!


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 16:03
High Quality SQL. Inspirierend.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 16:14
Hier die fertige Funktion: :D

function merge_authors($db,$destid,$sourceids) { // first get all involved groups ids if (!$result = $db->query("SELECT GroupID FROM MEMBERS WHERE AuthorID IN ($destid,$sourceids)")) return false; // then loop through the group ids while ($row = $result->fetch_row()) { $groupid = $row[0]; if (!$db->query("SELECT @minDate := MIN(Since) FROM MEMBERS WHERE GroupId = $groupid AND AuthorID IN ($destid,$sourceids) GROUP BY GroupID")) return false; if (!$db->query("SELECT @maxDate := MAX(Till) FROM MEMBERS WHERE GroupId = $groupid AND AuthorID IN ($destid,$sourceids) GROUP BY GroupID")) return false; if (!$db->query("UPDATE MEMBERS SET Since = @minDate, Till = @maxDate WHERE AuthorID = $destid AND GroupID = $groupid")) return false; $db->query("UPDATE MEMBERS SET AuthorID = $destid WHERE AuthorID IN ($sourceids) AND GroupID = $groupid"); if (!$db->query("DELETE FROM MEMBERS WHERE AuthorID IN ($sourceids) AND GroupID = $groupid")) return false; } $result->close(); return true; }


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 18:23
Könntest du das hier:
if (!$db->query("SELECT @minDate := MIN(Since) FROM MEMBERS WHERE GroupId = $groupid AND AuthorID IN ($destid,$sourceids) GROUP BY GroupID")) return false; if (!$db->query("SELECT @maxDate := MAX(Till) FROM MEMBERS WHERE GroupId = $groupid AND AuthorID IN ($destid,$sourceids) GROUP BY GroupID")) return false;
und das hier:
if (!$db->query("UPDATE MEMBERS SET Since = @minDate, Till = @maxDate WHERE AuthorID = $destid AND GroupID = $groupid")) return false; $db->query("UPDATE MEMBERS SET AuthorID = $destid WHERE AuthorID IN ($sourceids) AND GroupID = $groupid");

nicht jeweils als Einzeiler schreiben?

Was ist mit Join? Würde man das komplette Ding als Einzeiler formulieren können?^^


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 19:28
@Dr.BT_

Ja das Zusammenfassen zu einer Zeile geht, aber JOIN ist für etwas anderes.


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 21:20
Folgendes Problem:

Ein Skript (php) erstellt nach Rubriken geordnete Tabellen. Pro Rubrik eine Tabelle. In der Tabelle finden sich Artikel mit ein paar Zusatzangaben. Autoren, Likes, Anzahl der Kommentare etc.

Pro Tabelle werden zehn Zeilen ausgegeben. Unter jeder Tabelle findet sich dann die Navigation durch die Seiten. (1,2,3.....)

An jedem Link der Navigation findet sich ein Anker der während dem navigieren dafür sorgen soll dass man, nach dem laden wieder am Titel der entsprechenden Tabelle landet.

Es funktioniert nur leider nicht. Man landet nicht am Start der Tabelle wie es eigentlich sein müsste sondern in der Navigationszeile . Im grunde ist es die bessere Wahl. Man kann durch die Seiten navigieren ohne ständig zu der navigation scrollen zu müssen wenn z.B. die letzte Seite keine zehn Zeilen füllt. Der Cursor bleibt konstant in der Navizeile (1,2,3...) auch wenn die Anzahl der Zeilen sich verändert.

Technisch ist es allerdings falsch?


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 21:57
@Dr.BT_

Ich weiß nicht ob ich Dich richtig verstehe aber ich habe es bei mir so gemacht, dass der Anker am Titel der Tabelle sitzt und vom Suchscript dort ein gebaut wurde. Das Script fügt ihn auch an die links der Seitennavigation ...


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 22:53
Die Tabellen liegen in div containern mit IDs von tb-0 bis tb-x :

Jeder link in der Seitenwahl/Navigation trägt den Anker zum div. Nach einem Seitenwechsel müsste man eigentlich wieder am Anfang des divs landen. Es spielt auch keine Rolle ob das div oder die Tabelle die AnkerID trägt. Man landet an der falschen Stelle.

Die Seite wird komplett dynamisch erstellt. Die IDs werden generiert, die Links zusammengebastelt und mit dem passenden Anker erweitert. Am Ende started der Loop erneut für die nächste Kategorie.

$it = die Seitenzahl
$urlB = die neue URL
#tb-".$i." der Anker.

echo "[url='index.php?cat=".$urlB."#tb-".$i."']".$it."[/url]";


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

06.02.2013 um 22:56
@Dr.BT_

Was bewirkt denn das @ vor dem $style? :sleepy: ich geh dann mal schlafen, cu


melden

Programmieren: Hilfe & Austausch

06.02.2013 um 22:58
Erzeugt keinen Fehler wenn die variable nicht gesetzt ist. Nutz ich um die derzeit aktive Seite zu markieren. Wird in dem Fall eigentlich nicht benötigt. Just präventiv bei leeren Variablen...

Könnte auch zwei Klassen nutzen. Baustelle halt.

if( $total_pages 1 ){ $style = $cat_pages[$cat[$i]] == $it ? "style='color:rgb(34, 94, 155);font-size: 1.3em;bottom: 5px;'" : ""; echo "[url='index.php?cat=".$urlB."#tb-".$i."']".$it."[/url]"; }


melden

Programmieren: Hilfe & Austausch

07.02.2013 um 01:13
Seh grad dass es wohl irgendwas mit dem erstellen der Seite zu tun hat. Klick ich die derzeit aktive Seitenzahl funktionierts. Es wenn er die Seite komplett neu generieren muss stellt sich irgendwas quer.


melden

Programmieren: Hilfe & Austausch

07.02.2013 um 15:15
Wird die Seite aus dem cache geladen funktioniert alles. Wird die Seite neu generiert funktioniert es nicht wobei man auch dann zumindest immer an der selben Stelle landet?


melden

Programmieren: Hilfe & Austausch

10.02.2013 um 18:15
@AnGSt
Hat jemand Erfahrung mit nested lists?

Es geht um die effiezente erstellung der Hierarchie wobei die Anzahle der Ergebnisse pro Seite limitiert ist und man nicht alles auf einmal aus der Datenbank lesen kann um es danach zu ordnen.

Aktuell frag ich die DB nach allen Parents ab, limitiert 0,7 / 1,7 /2,7 etc.

Danach gehts in eine Schleife um alle Childkommentare zu finden und innerhalb der Schleife wird die Funktion get_child erneut aufgerufen um die childelemente der childelemente auszulesen. Die maximale Tiefe ist limitiert.

Angeblich sehr ineffektiv. Lässt sich das mit einer Query auszulesen und sortieren? Oder zumindest auslesen um es danach zu sortieren?

select parents limit n,7 count depth select all childs from selected parents and select childs from childs.....

cf66eb listOriginal anzeigen (0,7 MB)


melden

Programmieren: Hilfe & Austausch

10.02.2013 um 21:47
@Dr.BT_

Was sagt denn die Ladezeit? Wenn die passt, dann ist die Lösung doch ok.


melden

Programmieren: Hilfe & Austausch

10.02.2013 um 22:10
Geschwindigkeit ist offline bei einem Nutzer in Ordnung, wie das bei mehreren Anfragen aussieht k.a.

Die Lösung ist eben nur "Ok". Gut wäre besser.

Hätte gerne ein Multidimensionales Array.


Anzeige

melden