Ergebnis 1 bis 20 von 288

Thema: Allgemeiner Fragenthread II

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hi hab da n kleines denk Problem.

    Dreht sich um PHP und MySQL.


    Also ich habe 2 Tabellen, eine für Kategorien und eine für Spiele.
    Wenn ich jetzt einen neuen Eintrag in die Tabelle Spiele mache wird eine Kategorie auch gleich mit eingetragen und zwar die die aus der Tabelle Kategorie ausgewählt wurde. Wenn ich jetzt aber ein Kategorie Name änder, wird er aber nicht in der Tabelle Spiele geändert, das heißt wenn ich jetzt alle Einträge aus der Tabelle Spiele mit der Kategorie "123" Anzeigen lassen will aber vorher den Kategorie Namen in z.b. "456" geändert habe kann mir ja nichts mehr angezeigt werden.

    Verständlich?

    Wie kann ich das Verhindern oder Optimieren?

  2. #2
    Zitat Zitat von darrel burden Beitrag anzeigen
    Hi hab da n kleines denk Problem.

    Dreht sich um PHP und MySQL.


    Also ich habe 2 Tabellen, eine für Kategorien und eine für Spiele.
    Wenn ich jetzt einen neuen Eintrag in die Tabelle Spiele mache wird eine Kategorie auch gleich mit eingetragen und zwar die die aus der Tabelle Kategorie ausgewählt wurde. Wenn ich jetzt aber ein Kategorie Name änder, wird er aber nicht in der Tabelle Spiele geändert, das heißt wenn ich jetzt alle Einträge aus der Tabelle Spiele mit der Kategorie "123" Anzeigen lassen will aber vorher den Kategorie Namen in z.b. "456" geändert habe kann mir ja nichts mehr angezeigt werden.

    Verständlich?

    Wie kann ich das Verhindern oder Optimieren?
    Sofern du den Kategorienamen nicht per phpmyAdmin veränderst, sondern mit einem Script, sehe ich da keine Probleme.

    PHP-Code:
    $update0 mysql_query("UPDATE kategorien Set kategorie_name='456'");
    $update mysql_query("UPDATE tabelle Set kategorie='456' WHERE kategorie = '123'"); 

  3. #3
    Zitat Zitat von darrel burden Beitrag anzeigen
    Hi hab da n kleines denk Problem.

    Dreht sich um PHP und MySQL.


    Also ich habe 2 Tabellen, eine für Kategorien und eine für Spiele.
    Wenn ich jetzt einen neuen Eintrag in die Tabelle Spiele mache wird eine Kategorie auch gleich mit eingetragen und zwar die die aus der Tabelle Kategorie ausgewählt wurde. Wenn ich jetzt aber ein Kategorie Name änder, wird er aber nicht in der Tabelle Spiele geändert, das heißt wenn ich jetzt alle Einträge aus der Tabelle Spiele mit der Kategorie "123" Anzeigen lassen will aber vorher den Kategorie Namen in z.b. "456" geändert habe kann mir ja nichts mehr angezeigt werden.

    Verständlich?

    Wie kann ich das Verhindern oder Optimieren?
    Sorry, aber wie grauenhaft schlechter Stil ist das denn bitte?
    Du legst gefälligst in der Tabelle für die Kategorien eine Spalte ID (die meinetwegen auch anders heißen kann) an, die eine einzigartige und unveränderliche Nummer enthält (also einfach PRIMARY KEY auto_increment in PMA setzen) und referenzierst diese Nummer in der Tabelle der Spiele statt des Namens. Problem solved, so musst du den Namen eh erst abfragen und er wird nur einmal gespeichert.

    Neben der Lösung deines Problems spart es Speicherplatz in der Tabelle und erhöht die Performance (da du vermutlich den Namen nicht zum Key gemacht hast), auch wenn du erst noch den Namen abfragen musst. Geht sogar mit nur einem Query:
    Code:
    SELECT g.*, c.name AS category_name FROM games AS g LEFT JOIN categories AS c ON (g.category = c.id)
    (und bitte kommt mir jetzt nicht mit "ne ganze Zeile zu selecten ist schlechter Stil", das ist nur Beispielcode! )

    Geändert von dead_orc (25.05.2008 um 20:19 Uhr)

  4. #4
    @Antares, das sieht cool aus, danke!

    @dead_orc, die ID hab ich ja in der Tabelle. Das ist natürlich auch ne Möglichkeit.


    Danke euch beiden! Endlich hat meine Blockade ein Ende. xD

    Ja das abern Schlechter Progg Stil. xD Werd deine Variante nehmen auch wenn Antares Schneller war.

    Geändert von deadshox (25.05.2008 um 20:26 Uhr)

  5. #5
    Ich habe eine DATE Spalte. Wie kann ich alle Einträge von z.B. 5 Tagen abfragen, mit nem gewissen Offset, der Offset ist eine Anzahl Tage nicht eine Anzahl Einträge?
    Die Anzahl der Daten(pl. von Datum) kann ich ja über
    PHP-Code:
    $sql "SELECT COUNT( DISTINCT `date` ) as `anz` FROM table;"
    abfragen.
    Hab gedacht mit einer Group By Selektion, dann bekomm ich ja 5 Einträge, müsste dann aber eine zweite Anfrage durchführen. Get das nun auch eleganter?

  6. #6
    Hm, je nachdem, was du genau willst. Mit der jetzigen Methode würdest du ja, wenn ich's recht verstehe, die Einträge von den letzten fünf Tagen mit existierenden Einträgen bekommen, also z.B. die Einträge der letzten sechs Tage, falls für einen der letzten fünf keine Einträge vorhanden sind.

    Aber falls das nicht gewünscht ist, würde ich's wahrscheinlich mit TO_DAYS() oder UNIX_TIMESTAMP() machen, und auf eine Differenz kleiner 5 (bzw. kleiner 5 * 24 * 60 * 60) filtern. Also:
    Code:
    SELECT * FROM `table` WHERE TO_DAYS(`date`) - TO_DAYS(NOW()) < 5

  7. #7
    Zitat Zitat von drunken monkey Beitrag anzeigen
    Hm, je nachdem, was du genau willst. Mit der jetzigen Methode würdest du ja, wenn ich's recht verstehe, die Einträge von den letzten fünf Tagen mit existierenden Einträgen bekommen, also z.B. die Einträge der letzten sechs Tage, falls für einen der letzten fünf keine Einträge vorhanden sind.
    Ja das will ich, nur jetzt noch mit einem Offset, also die 5 Tage vor den aktuellen 5 Tagen. Nur könnten da z.B.... sagen wir mal es ist der 12. Tag, der 8. und der 4. sind ohne Eintrag, jetzt will ich z.B. 12-7 herausfiltern können, aber auch auf einer anderen Seite 6-1.

  8. #8
    So vielleicht?
    Code:
    SELECT * FROM `table` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) - 5 < 5 AND TO_DAYS(NOW()) - TO_DAYS(`date`) - 5 > 0

  9. #9
    Zitat Zitat von dead_orc Beitrag anzeigen
    So vielleicht?
    Code:
    SELECT * FROM `table` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) - 5 < 5 AND TO_DAYS(NOW()) - TO_DAYS(`date`) - 5 > 0
    Nein, das beachtet ja nicht, ob es keine Einträge zu einem Datum hat, wie drunken monkey gesagt hat, will ich, falls 2 leer sind, 7 Tage anzeigen lassen.

  10. #10
    Zitat Zitat von Drakes Beitrag anzeigen
    Ja das will ich, nur jetzt noch mit einem Offset, also die 5 Tage vor den aktuellen 5 Tagen. Nur könnten da z.B.... sagen wir mal es ist der 12. Tag, der 8. und der 4. sind ohne Eintrag, jetzt will ich z.B. 12-7 herausfiltern können, aber auch auf einer anderen Seite 6-1.
    In dem Fall würde ich wohl einfach die zwei Abfragen verwenden. Wahrscheinlich ging's auch mit komplizierten geschachtelten Abfragen, aber sich darüber den Kopf zu zerbrechen ist es wohl nicht wert, und ob's performanter oder klarer wäre ist auch sehr stark die Frage. <__<

  11. #11
    Hallo

    Da ich vorzugsweise mit Ajax arbeite, möchte ich den Usern selbstverständlich auch eine javascriptfreie Möglichkeit der Datenübermittlung anbieten.

    HTML-Code:
    <a href="linkziel" onClick="jsfunktion(); return false;">Link</a>
    So wäre es eigentlich gut gelöst. Ist JS aktiviert wird das linkziel per "return false" außer Kraft gesetzt und die JS Instruktionen werden befolgt.
    Ist JS deaktiviert wird der User zum Linkziel geleitet.

    Das Problem an der Sache ist nur, dass die Javascript Eventhandler, soweit ich weiß, nicht mehr mit dem aktuellen HTML konform sind.
    Welche andere Lösungsmöglichket gibt es denn hier?

    Btw. Wie lassen sich den generell die recht nützlichen Eventhandler ersetzen? (OnFocus, OnBlur z.B.) ?

  12. #12
    Zitat Zitat von Antares Beitrag anzeigen
    Hallo

    Da ich vorzugsweise mit Ajax arbeite, möchte ich den Usern selbstverständlich auch eine javascriptfreie Möglichkeit der Datenübermittlung anbieten.

    HTML-Code:
    <a href="linkziel" onClick="jsfunktion(); return false;">Link</a>
    So wäre es eigentlich gut gelöst. Ist JS aktiviert wird das linkziel per "return false" außer Kraft gesetzt und die JS Instruktionen werden befolgt.
    Ist JS deaktiviert wird der User zum Linkziel geleitet.

    Das Problem an der Sache ist nur, dass die Javascript Eventhandler, soweit ich weiß, nicht mehr mit dem aktuellen HTML konform sind.
    Welche andere Lösungsmöglichket gibt es denn hier?

    Btw. Wie lassen sich den generell die recht nützlichen Eventhandler ersetzen? (OnFocus, OnBlur z.B.) ?
    Da liegst du falsch. Die Event-Handler sind sogar in XHTML 1.1 noch konform, wenn man sie komplett klein schreibt. Wenn der Validator also bei onClick meckert, nenn ihn onclick und alle sind glücklich.
    Außerdem könnte man sie notfalls durch reines Javascript ersetzen:
    document.getElementById('link').onclick = handler_function;

  13. #13
    Zitat Zitat von dead_orc Beitrag anzeigen
    Da liegst du falsch. Die Event-Handler sind sogar in XHTML 1.1 noch konform, wenn man sie komplett klein schreibt. Wenn der Validator also bei onClick meckert, nenn ihn onclick und alle sind glücklich.
    Außerdem könnte man sie notfalls durch reines Javascript ersetzen:
    document.getElementById('link').onclick = handler_function;
    Nagut, hab ich mich wohl getäuscht
    Danke jedenfalls =)

  14. #14
    Wieso sollte man in PHP array() verwenden? Sollte man es der Lesbarkeit zu liebe tun oder kann ich mir die Linien sparen? (mal ausgenommen man gibt die Variable in einer Funktion zurück und die Array könnte leer bleiben)

    Geändert von Drakes (12.07.2008 um 22:33 Uhr)

  15. #15
    Ganz simpel, in erster Regel ist die "Funktion" (ist eig. keine richtige Funktion, sondern ein festes Element) dafür da um einer Variable einen Anfangswert zu geben, bzw. ein Array einer Funktion zu übergeben:
    PHP-Code:
    tuWas(Array('wert''wer2''wert3')); 
    Auch wenn in PHP Variablen nicht direkt deklariert werden müssen, brauchen gerade wenn man einem Array in einer Schleife Werte hinzufügen möchte diese ein Anfangswert der PHP mitteilt das die Variable auch existiert und das es sich um ein Array handelt.
    PHP-Code:
    $tmp = Array();
    while(
    $row mysql_fetch_assoc($result)) {
          
    $tmp[] = $row;


Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •