kostenloser Webspace werbefrei: lima-city


Aufzählung & Nummernausgabe

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich möchte gerne per MySQL eine arte "Gefällt mir" Funktion entwickeln.
    Deswegen habe ich erstmal in MySQL eine neue Datenbank namens posts erstellt und dort dann folgende Bereiche eingerichtet:
    -Username
    -Content
    -Date
    -loves
    -id (auto,max länge 8)

    Nun habe ich dort einen einfachen test Beitrag per MySQL eingetragen und habe diesen auf einer Webseite ausgeben lassen. Genau darunter habe ich einenspan text Anklickbar gemacht ,sodass ich per Javascript Daten an eine 2te Datei abschicke. Dort soll dann jeweils einfach nur in der Spalte loves der Username ergänzt werden.

    Derzeit ist der Inhalt der Spalte Folgender: MarvinKleinMusic;TestUser;

    Doch die Ausgabe ergibt genau das so wie es dort steht. Gibt es eine art Möglichkeit das ; als trenner zu werten und es in der Ausgabe nicht zu berücksichtigen? Ebenso wie die Aufzählung als Zahl der gesammt Gefällt Mir angaben?

    und wie kann ich den Inhalt per Mausklick auf den Span einfach um den Usernamen Ergänzen , bzw. bei erneutem klick wieder löschen lassen? :)

    Vielleicht hat ja der ein oder andere hier eine Idee! :)

    LG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hallo,

    Da hilft dir die PHP-Funktion explode()
    http://www.php.net/manual/de/function.explode.php

    <?php
    $a = "AUS DB";
    $b = explode(";", $a);
    echo $b[0];
    echo $b[1];
    ?>


    oder in einer Schleife ausgeben!

    Viel Spaß
  4. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Wow das ist der Hammer!

    Doch wie kann ich jetzt alle Ausgaben als eine Zahl erhalten? ;)

    LG
  5. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,

    da hilft die Funktion count() http://www.php.net/manual/de/function.count.php

    <?php
    $a = "AUS DB";
    $b = explode(";", $a);
    $wieviel = count($b);
    echo $wieviel;
    ?>


    und nun noch diese Frage beantworten:
    und wie kann ich den Inhalt per Mausklick auf den Span einfach um den Usernamen Ergänzen , bzw. bei erneutem klick wieder löschen lassen? :)

    hinzufügen:
    1. auslesen der Daten aus der DB
    2. einfach deinen String erweitern und wieder in der DB speichern

    <?php
    $a = "AUS DB";
    $a = $a . ";neuerName";
    echo $a oder speichern in DB;
    ?>

    löschen:
    1. auslesen der Daten aus der DB
    2. deinen String mit explode in array schreiben
    3. mit array_search() nach Namen suchen
    4. löschen und neuen String in DB speichern

    <?php
    $a = "AUS DB";
    $b = explode(";", $a);
    $wo = array_search('löscheNAME', $b) //gibt Schlüssel aus Array in $wo aus
    unset($b[$wo); //löscht den Namen
    $c = implode(";", $b); //array in string schreiben mit ; als Trennzeichen
    echo $c oder speichern in DB;
    ?>


    Danke für die positive Bewertung, habe schon vielen geholfen aber noch nie eine bekommen :)

    Have FUN

    Beitrag zuletzt geändert: 28.3.2014 22:11:14 von michaelkoepke
  6. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    michaelkoepke schrieb:
    Hi,

    da hilft die Funktion count() http://www.php.net/manual/de/function.count.php

    [code]

    hinzufügen:
    1. auslesen der Daten aus der DB
    2. einfach deinen String erweitern und wieder in der DB speichern




    Wie sieht es denn dabei aus wenn mehrere Personen gleichzeitig auf den Knopf drücken würden? Würde sich das dann vielleicht schneller ersetzen als es sich eintragen kann? :)

    LG
  7. marvinkleinmusic schrieb:
    [...] Wie sieht es denn dabei aus wenn mehrere Personen gleichzeitig auf den Knopf drücken würden? Würde sich das dann vielleicht schneller ersetzen als es sich eintragen kann? :) [...]
    Richtig, das ist möglich. Hinterher fehlt dann einer der beiden Einträge in der DB.

    Für dieses Problem habe ich noch keine ideale Lösung.
    Eine vielleicht etwas unsaubere Möglichkeit wäre, mit flock() eine beliebige (evtl. leere) Datei zu reservieren. Dann führt man die Manipulation an der DB durch und gibt danach die Datei wieder frei.

    Kennt jemand bessere Lösungen?
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Warum so hässlich und umständlich?

    Anstatt die Daten in einem String zu speichern, solltest du dafür eine eigene Tabelle nutzen, die ca. so aussieht:
    +----------+
    | post     |
    | username |
    +----------+
    Wenn jemand auf »like« klickt trägst du die Post-ID sowie den Benutzernamen in diese Tabelle ein, wenn der Like wieder aufgehoben werden soll, löscht du ihn dort wieder raus.

    Und wie bekommst du dann die Anzahl bzw alle Posts mit Anzahl der Likes? Zum Beispiel so:
    SELECT P.id, P.username, P.content, P.date, COUNT(L.username) AS likes
    FROM posts P
    LEFT JOIN likes L
    ON L.post = P.id
    GROUP BY P.id
    Erstellen eines Likes:
    INSERT INTO likes (post, username) VALUES (1, 'user1');
    Löschen eines Likes:
    DELETE FROM likes WHERE username = 'user1' AND post = 1

    Bei der Tabellendefinition der likes-Tabelle wäre eventuell noch ein »
    ON DELETE CASCADE
    « nicht schlecht, sodass alle Likes automatisch gelöscht werden, sobald der dazugehörige Post (oder Benutzer) entfernt wird.

    Bei dieser Variante gibts auch kein Problem mehr wegen Locking o.ä., da es völlig egal ist in welcher Reihenfolge wer und wie lange etwas einträgt oder löscht.

    Beitrag zuletzt geändert: 29.3.2014 13:40:31 von hackyourlife
  9. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Huhu HackYourLife!

    Ja das erscheint mir simple und Logisch. Allerdings kann ich damit nichts anfangen da ich soeine MySQl schreibweise nie angewendet habe.
    SELECT P.id, P.username, P.content, P.date, COUNT(L.username)
    FROM posts P
    JOIN likes L
    ON L.post = P.id
    GROUP BY P.id


    Wofür steht dort P. und L.?


    LG und danke schön! :)
  10. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Allerdings kann ich damit nichts anfangen da ich soeine MySQl schreibweise nie angewendet habe.
    Wenn du das mal in phpMyAdmin o.ä. ausführst solltest du die Fehlder »id«, »username«, »content«, »date« und »COUNT(L.username)« (oder nach meinem Edit »count«) als Rückgabewerte bekommen, und dieses Wissen sollte eigentlich bereits reichen, um das anwenden zu können.

    marvinkleinmusic schrieb:
    Wofür steht dort P. und L.?
    Die kannst du dir aussuchen. Wenn du schreibst
    FROM tabelle T
    , dann kannst du auf die Felder der Tabelle
    tabelle
    mit
    T.feld
    zugreifen. Das
    T
    ist also ein Name / Abkürzung, den du einer Tabelle in einer Abfrage geben kannst. Wichtig ist das erst, wenn du eine Abfrage über mehrere Tabellen machst, denn dann kann es, wie in diesem Fall auch, vorkommen, dass mehrere Tabellen Spalten mit dem gleichen Namen enthalten, und woher weiß MySQL sonst welche Spalte in welcher Tabelle du meinst?
    Bei dieser Abfrage wäre das die Spalte
    username
    , welche sowohl in der Tabelle
    posts
    als auch in der Tabelle
    likes
    vorkommt.
  11. marvinkleinmusic schrieb:
    ... Wie sieht es denn dabei aus wenn mehrere Personen gleichzeitig auf den Knopf drücken würden? ...
    gar nicht ;) du brauchst schon etliche 1000 leute, die 'gleichzeitig' drücken (würden, wenn sie könnten).

    fuerderer schrieb:
    ... Richtig, das ist möglich. Hinterher fehlt dann einer der beiden Einträge in der DB.
    ohh ohh! uhh uhh! was ja nicht der sinn der sache wäre!!

    Für dieses Problem habe ich noch keine ideale Lösung.
    Eine vielleicht etwas unsaubere Möglichkeit wäre, mit flock() eine beliebige (evtl. leere) Datei zu reservieren. Dann führt man die Manipulation an der DB durch und gibt danach die Datei wieder frei.
    Kennt jemand bessere Lösungen?
    yo!
    das mit der datei, ist eine sehr sehr schlechte lösung! warum? ein datenbankserver (egal welcher) ist im faktor 100 - 1000 mal schneller als eine combo von 'webserver + scriptsprache'.


    ich zähle jetzt mal nur 1-2 lesestoff-stichworte zum thema auf:
    'locking', 'locking read', 'deadlock', 'isolation level', 'mutex', 'rw-lock', 'latch' ..., o. etwas ausschweifender: 'session-specific temporary tables in a read-only transaction' ... und und und. (alles ist zu ergooglen in verbindung mit mysql.)

    von 'verdammten strebern' kann noch dazu genommen werden: 'InnoDB Performance and Scalability Enhancements'.
    (besonders:
    - 14.2.12.2.3 :: 'Optimizations for Read-Only Transactions';
    - 14.2.12.2.6 :: 'Non-Recursive Deadlock Detection';
    - xx.x.xx.x.x :: was weiß is! sucht auch selber was ;).

    einen geeigneten einstiegspunk in die 'phöse thematik' zu empfehlen ist nicht unbedingt einfach. ich mache jetzt aber trotzdem einen versuch für euch: locking reads. (gültige versionsnummern sind dazu: 4.1, 5.0, 5.1, 5.5, 5.6, 5.7. '5.7' habe ich willkürlich gewählt)
    unbedingt beachten! geht in allen beiträgen 3-4 stufen in die tiefe bei den weiterführenden links! bei allen themen - bei allen links!

    viel spaß ;)

    Beitrag zuletzt geändert: 1.4.2014 1:32:31 von czibere
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!