ilch Forum » Allgemein » HTML, PHP, SQL,... » News Extended - Modifizierung

Geschlossen
  1. #1
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    Ich bräuchte mal einen Denkanstoss, da ich irgendiwe gerade ein Blackout habe!

    Mein Plan ist es:
    • Immer nur die letzten 20 News aktiv
    • ab der 21.ten News automatisch Archiv
    • Anzeige auf der Newsseite 5 volle News und darunter die nächsten 15 News als TextLink ala LastNews
    • keinen SITELINK mehr, sollte auch dann nicht mehr benötigt sein


    admin/news.php
    db_query('UPDATE `prefix_news` set archiv = 1 WHERE archiv != 0 AND ??? ');

    Hier stehe ich noch auf dem Schlauch, wie ist die richtige Abfrage, welche alle News anspricht, ab der letzten 21.ten News?

    contents/news/news.php
    Hier habe ich mit der Integrierung probleme! Wie füge ich hier die 15 Textlinks-News, nach den 5 vollen News ein?

    Das wäre eine mögliche Abfrage (Prüft die Anzahl der nicht archivierten News! Gibt ab der 5.ten News diese aus!
    $tn_id = intval(@db_result($news_opts = db_query("SELECT v1, v2 FROM prefix_allg WHERE k = 'news' LIMIT 1"),0,0));
    $aktNews  = @db_result(db_query("SELECT count(news_id) FROM ic1_news WHERE archiv = 0"),0);
    $abf = 'SELECT *
            FROM prefix_news
    				WHERE news_recht >= '.$_SESSION['authright'].' AND `show` > 0 AND `show` <= UNIX_TIMESTAMP() AND news_id != '.$tn_id.' AND archiv != 1 AND (endtime IS NULL OR endtime > UNIX_TIMESTAMP())
                    ORDER BY news_time DESC
    				LIMIT 5,'.$aktNews.'';
    $erg = db_query($abf);


    Vielleicht kann mir jemand helfen!
    Speziell mit der Integrierung und der Archivierungsabfrage!


    Zuletzt modifiziert von Lord|Schirmer am 13.06.2008 - 16:48:12
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    Gibt es bei LIMIT so etwas wie ab der 5.ten bis ENDE/REST

    also ...LIMIT 5, ??
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Eigentlich ist es ja Limit Start, Länge und du weißt doch, dass du 15 auslesen willst, wäre also 5,15 aber mal ganz anders gedacht, du könntest auch mit der normalen Abfrage gleich alle 20 auslesen und dann halt nach den ersten 5 die Art der Ausgabe wechseln.

    Wegen der Abfrage, die du suchst könnte man sicher auch mit Limit machen, musst halt das ORDER BY richtig machen und dann mit LIMIT 21 (oder vielleicht auch 20 :P) dann halt aller die älter sind ins Archiv schieben, probiere das am besten vorher erst mal mit phpmyadmin aus zwinker
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    Die Abfrage der letzten 20 News ist verhältnismaßig einfach
    SELECT * FROM `ic1_news` WHERE archiv = 0 ORDER BY news_time DESC LIMIT 0,20


    aber Kopfzerbrechen bereitet mir die Archivierungsabfrage der News ab der 21.ten! Für mich funktioniert das nur mit zwei Abfragen

    UPDATE `ic1_news` SET archiv = 1 WHERE archiv = 0
    UPDATE `ic1_news` SET archiv = 0 ORDER BY news_time DESC LIMIT 0,20
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Was ich meinte was sowas wie
    UPDATE `ic1_news` SET archiv = 1 ORDER BY news_time DESC LIMIT 20

    Aber ich bin mir nicht sicher, ob das geht.
    Ansonsten
    UPDATE `ic1_news`a SET a.archiv =1 WHERE a.news_id IN (SELECT b.news_id FROM ic1_news b ORDER BY b.news_time DESC LIMIT 20)


    Wobei ich darauf hinweisen will, dass man immer prefix statt ic1 nehmen sollte!


    Zuletzt modifiziert von Mairu am 13.06.2008 - 23:51:09
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    Damit setzt die Datenbank die letzten 20 News ins Archiv. Ich glaub ich mache das mit zwei Abfragen

    UPDATE `ic1_news` SET archiv = 1 WHERE archiv = 0 
    UPDATE `ic1_news` SET archiv = 0 ORDER BY news_time DESC LIMIT 20
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    ZitatZitat geschrieben von Mairu

    Ansonsten
    UPDATE `ic1_news`a SET a.archiv =1 WHERE a.news_id IN (SELECT b.news_id FROM ic1_news b ORDER BY b.news_time DESC LIMIT 20)



    Kommt leider Fehlermeldung

    #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ok interessehalber könntest du ja mal schauen, welche Version von MySQL das ist.
    PS: Habe gerade nochmal nachgeschaut, dass es mit einer recht aktuellen 5.0.51a nicht funktioniert.

    Du kannst die Abfrage mit PHP natürlich auch teilen.
    $sql = db_query("SELECT `news_id` FROM `prefix_news` ORDER BY `news_time` DESC LIMIT 20");
    if (db_num_rows($sql) > 0 ) {
        $ids = array();
        while ($row = db_fetch_object($sql)) {
            $ids[] = $row->news_id;
        }
        $ids = implode(', ',$ids);
        db_query("UPDATE `prefix_news` a SET a.`archiv` = 1 WHERE a.`news_id` IN ($ids)");
    }



    Zuletzt modifiziert von Mairu am 14.06.2008 - 09:08:12
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.680
    Beitragswertungen
    1216 Beitragspunkte
    @Mairu -> Danke nochmal für deine Hilfe!

    Ich habe es nun doch mit mehreren Abfragen umgesetzt, ist wahrscheinlich nicht die beste Lösung, aber die für mich Verständlichste!

    Aktuell werden nun auf meiner Website 5 volle News und 20 Textnews mit Infos angezeigt und zusätzlich bei der Newserstellung ab der letzten 21. News alles archiviert!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ok dabei muss ich dann doch noch mal drauf hinweisen, dass LIMIT 20 natürlich LIMIT 20, 100000 sein muss, weil sonst die ersten 20 und nicht ab 20 genommen werden.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten