|
|
|
|
Ehm. Benötige noch kurz Erklärung was CONSTRAINT `foo` macht...
|
|
|
|
|
|
|
Ok benötige nochwas andere von Euch zu wissen.
Threads, die in der Spalte "Sticky" eine 1 beinhalten, sollen zu oberst aufgelistet werden.
Allerdings habe ich ORDER BY bereits der ThreadID vergeben.
$res = mysql_query("SELECT * FROM Threads WHERE BID=".$HTTP_GET_VARS['BID']." ORDER BY 'ID'");
Jetzt müsste hier also Sticky noch ins Order hinein.
Kann ich das so lösen?
Also es müsste etwa so aussehen:
$res = mysql_query("SELECT * FROM Threads WHERE BID=".$HTTP_GET_VARS['BID']." ORDER BY 'ID', 'Sticky'");
Sticky müsste eine höhere Priorität haben als ID.
|
|
|
|
|
|
|
Dann schreib am besten 'Sticky' vor 'ID'. Du kannst jedem Feldnamen auch noch nen 'ASC' bzw. 'DESC' zuweisen.
Im übrigen ist
|
Code: |
WHERE BID=".$HTTP_GET_VARS['BID']."
|
|
gefährlich. Informier dich mal über SQL-Injections .
|
|
|
|
|
|
|
Wohooooo.
Genial!
Ne das ist schon ok mit HTTP_GET_VARS. Habe einige Checks im Header laufen, sodass schnell mal exit; ausgeführt wird.
|
|
|
|
|
|
|
| Zitat von Limbi
Wohooooo.
Genial!
Ne das ist schon ok mit HTTP_GET_VARS. Habe einige Checks im Header laufen, sodass schnell mal exit; ausgeführt wird.
| |
nein das mit HTTP_GET_VARS ist so nicht in Ordnung. Welche PHP-Version verwendest du eigentlich? $_GET waere toll.
|
|
|
|
|
|
|
Meine Güte sag nicht dass es so nicht geht.
Seit 5 Jahren habe ich es mir angewöhnt, mit HTTP_GET_VARS zu arbeiten.
PHP Version 4.3
|
|
|
|
|
|
|
aber auch php entwickelt sich weiter...
mysql.com/constraint und in dem Zusammenhang zusätzlich vielleicht noch der Begriff "Referentielle Integrität".
Ich find $_GET eh viel hübscher
|
|
|
|
|
|
|
Hm ok dann gewöhn ich mir das um.
Nocheine wichtige Frage:
Ich sollte mit mysql_query("SELECT * From `Threads` WHERE BID=$bid") irgendwie überprüfen, ob die ThreadID (TID) in einer anderen Tabelle existiert oder nicht. Das heisst es müsste irgendwie so aussehen:
mysql_query("SELECT * From `Threads` WHERE BID=$bid && TID=TID in TABLE `ThreadsR`")
Wie stell ich das an?
|
|
|
|
|
|
|
mysql_query("SELECT *, ThreadsR.TID From Threads, ThreadsR WHERE BID=$bid && TID=ThreadsR.TID")
Müsste so gehen. Glaub ich. Nicht getestet und so weiter.
|
|
|
|
|
|
|
Hey.
Nein so hats leider nicht geklappt.
Aber ich habe das jetzt auf sehr unelegante Weise gelöst.
|
PHP: |
$res = mysql_query("SELECT * FROM ThreadsR WHERE BID=".$BID." && UID=$uid");
$r=0;
while($row=@mysql_fetch_assoc($res)){
if($r>0){$checkline.= " OR ";}
$checkline .= "TID = ".$row['TID'];
$r++;}}
$res = mysql_query("SELECT * FROM Threads WHERE $checkline ORDER BY ID");
|
|
Klar, es hat noch ein paar andere Checks drinnen, aber das Prinzip sieht so aus. Meint Ihr, das mysql_query() das bei 200 Threads noch mit macht?
Es geht ja darum, dass er nur die Threads ausspuckt, die gelesen sind, bzw. ungelesen sind. Die gelesenen Threads sind im ThreadsR gespeichert.
Bei der Funktion nur ungelesene Threasd anzeigen sieht das dann so aus.
|
PHP: |
$res = mysql_query("SELECT * FROM ThreadsR WHERE BID=".$BID." && UID=$uid");
$r=0;
while($row=@mysql_fetch_assoc($res)){
if($r>0){$checkline.= " AND ";}
$checkline .= "TID != ".$row['TID'];
$r++;}}
$res = mysql_query("SELECT * FROM Threads WHERE $checkline ORDER BY ID");
|
|
Aber hey! Es funktioniert! Immerhin!
|
|
|
|
|
|
|
*reinhusch*
*als allgemeiner MySQL Thread missbrauch*
Wie migriere ich am besten von 4.0 auf 5.0? Hab etz nen 4.0er Sarge am laufen, und die Daten sollen auf nen Gentoo (da is 5.0 stable). Wie krieg ich das jetzt wieder sauber in die DB rein?
|
|
|
|
|
|
|
|
|
|
|
Es gab doch etliche Changes seit den Versionen? Klappt denn das problemlos?
|
|
|
|
|
|
|
in der Regel wird Software so weiterentwickelt, dass diese abwärtskompatibel ist. Also ja, es sollte gehen.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Netbeater am 24.11.2006 12:22]
|
|
|
|
|
|
Habs einige male mit verschiedenen Datenbanken gemacht. Gab nie Probleme. Der bisherig geltene SQL-Syntax hat sich ja auch idR. nicht verändert.
|
|
|
|
|
|
|
| Zitat von Limbi
Hey.
Nein so hats leider nicht geklappt.
Aber ich habe das jetzt auf sehr unelegante Weise gelöst.
|
PHP: |
$res = mysql_query("SELECT * FROM ThreadsR WHERE BID=".$BID." && UID=$uid");
$r=0;
while($row=@mysql_fetch_assoc($res)){
if($r>0){$checkline.= " OR ";}
$checkline .= "TID = ".$row['TID'];
$r++;}}
$res = mysql_query("SELECT * FROM Threads WHERE $checkline ORDER BY ID");
|
|
Klar, es hat noch ein paar andere Checks drinnen, aber das Prinzip sieht so aus. Meint Ihr, das mysql_query() das bei 200 Threads noch mit macht?
Es geht ja darum, dass er nur die Threads ausspuckt, die gelesen sind, bzw. ungelesen sind. Die gelesenen Threads sind im ThreadsR gespeichert.
Bei der Funktion nur ungelesene Threasd anzeigen sieht das dann so aus.
|
PHP: |
$res = mysql_query("SELECT * FROM ThreadsR WHERE BID=".$BID." && UID=$uid");
$r=0;
while($row=@mysql_fetch_assoc($res)){
if($r>0){$checkline.= " AND ";}
$checkline .= "TID != ".$row['TID'];
$r++;}}
$res = mysql_query("SELECT * FROM Threads WHERE $checkline ORDER BY ID");
|
|
Aber hey! Es funktioniert! Immerhin!
| |
Sehe ich das richtig?
Du hast eine Tabelle 'threadR', die speichert jeweils UID und TID von gelesenen Thread und eine Tabelle 'thread', die speichert die eigentlich Thread-Daten (TID, Erstellungsdatum, usw). Und jetzt willst du jeweils für eine bestimmt UID die schon gelesenen Threads haben (bzw. die ungelesenen, aber das wäre ja nur umgedreht).
Mit eine Join wäre die Sache doch ziemlich einfach:
|
PHP: |
SELECT thread.TID, thread.title, thread.subtitle
FROM thread
LEFT JOIN threadr ON threadr.TID = thread.TID
WHERE threadr.UID = '1'
|
|
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von [mathu] am 24.11.2006 13:45]
|
|
|
|
|
|
| Zitat von Netbeater
in der Regel wird Software so weiterentwickelt, dass diese abwärtskompatibel ist. Also ja, es sollte gehen.
| | Ausnahme natürlich DirectX.
Wobei ich den Schritt gut verstehen kann. Irgendwann ist eine Software einfach gar und es ist programmiertechnisch unsinnig, den Fehler von vor drei Versionen explizit wieder einzubauen um Kompatibilität zu gewährleisten.
|
|
|
|
|
|
|
Wenn es nur darum gegangen wäre, dann hätte man DX10 trotzdem für XP rausbringen können.
|
|
|
|
|
|
|
|
|
|
|
Hab ne dringende Frage: Wie schaffe ich es, von einer Datenbank xxx1 alle Daten direkt in Datenbank (noch leere Datenbank) save_von_xxx1 auf dem gleichen Server zu kopieren? Natürlich müsste man nachher auch alles wieder zurückkopieren können.
Habe leider mit Google nichts finden können.
Das ganze läuft bei mir auf dem localhost und wird auch nur im Intranet gelauncht, deswegen ist der Traffic im Prinzip wurst, brauche nur eine funktionierende Lösung.
Vielen Dank schon mal im Voraus!
|
|
|
|
|
|
|
dump -> insert in neue DB?
Beim MSSQL kann man das über die GUI machen, beim MySQL würd ich nen Dump machen und den Datenbanknamen in der .sql-Datei ändern.
|
|
|
|
|
|
|
Hätte noch dazuschreiben sollen, dass das ganze per PHP und MySQL funktionieren muss. Nen manuellen Dump zu machen, ist per Phpmyadmin zwar möglich, aber eher schlecht, da die Anwender davon möglichst nichts mitbekommen sollten.
Es sollen halt Speicherstände der Datenbank erstellt werden, damit man möglichst schnell wieder ursprüngliche Zustände wieder herstellen kann.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von cyberschaf am 26.11.2006 15:17]
|
|
|
|
|
|
was bekommen die Anwender denn von einem Dump mit?
€: zu Wiederherstellungszwecken sind solche Backups natürlich nicht ganz geeignet, da sie sich wahrscheinlich nicht um laufende Transaktionen scheren. Da muss man dann mit Onlinebackups und Transaktionslogs arbeiten, um zu einem definierten und konsistenten Datenbankstand zurückkehren zu können. Soweit ich weiß, unterstützt MySQL auch das, allerdings weiß ich nicht, ob das auch in der CommunityEdition der Datenbank drin ist.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von GarlandGreene am 26.11.2006 15:26]
|
|
|
|
|
|
Okay, ich erklär noch mal kurz, wo das Problem ist:
Es geht um ein Planspiel, bei dem auch mehrere Spiele parallel laufen sollen. Diese Spiele sind jeweils in einzelnen Datenbanken untergebracht und sollen halt die Möglichkeit bieten, resettet zu werden. Dies ist natürlich nur möglich, wenn man eine zweite Datenbank hat, die genau die Ursprungsdaten hat.
Allerdings bin der Admin nicht ich selber, sondern die Assistenten am Institut.
Außerdem muss man in der Testphase jedesmal mit den gleichen Werten und Parametern testen und da wäre es auch sehr nervig, jedesmal mit phpmyadmin SQL-Queries zu importieren, da die Oberfläche immer die gleiche sein soll.
In der Zeit, in der diese Datenbankcopies durchgeführt werden, ist auch gewährleistet, dass keinerlei Zugriffe auf die Datenbank passieren.
€: Problem gelöst: ich kopiere die Datenbanken einfach per xcopy hin und her.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von cyberschaf am 26.11.2006 19:16]
|
|
|
|
|
|
| Zitat von GarlandGreene
dump -> insert in neue DB?
Beim MSSQL kann man das über die GUI machen, beim MySQL würd ich nen Dump machen und den Datenbanknamen in der .sql-Datei ändern.
| |
Auch wenns etwas OffTopic ist: Bei MSSQL würde ich das in dem Fall aber nicht über die GUI machen, sondern mir einmal ein DTS-Package erstellen, dass dann nurnoch aufgerufen werden muss
|
|
|
|
|
|
|
Obwohl dus schon gelöst hast:
Mit
kriegst du ne Liste mit allen Tabellen.
Danach könntest du für jede Tabelle
|
Code: |
CREATE TABLE save_von_db1.tablename AS SELECT * FROM tablename |
|
aufrufen.
|
|
|
|
|
|
|
| Zitat von [mathu]
|
PHP: |
SELECT thread.TID, thread.title, thread.subtitle
FROM thread
LEFT JOIN threadr ON threadr.TID = thread.TID
WHERE threadr.UID = '1'
|
|
| |
Hey danke!
|
|
|
|
|
|
Thema: MySQL Fragen |