MySQL Abfrageproblem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Abfrageproblem

    Hallo,
    Habe ein kleines Abfrageproblem in meinem PHP-Script. Deshalb habe ich die SQL-Afrage in phpMyAdmin mal durchlaufen lassen. Mein Problem ist, das ich ich diese Abfrage mit der gleichen Tabelle auf meinem Root-Server Fehlerfrei ausführen lassen kann. Aber Local (xampp) und bei meinem Webhoster eben nicht.
    Hier mal das Script:
    PHP-Code:
    SELECT f1 . * , AVGr.rate_point ) AS ratingCOUNTr.votes_file 
                                        AS 
    total_votesu.user_idu.usernamec.cat_idc.cat_nameCOUNTcm.comments_id 
                                        AS 
    total_comments
    FROM phpbb_pa_files 
    AS f1phpbb_pa_cat AS c
    LEFT JOIN phpbb_pa_votes 
    AS r ON f1.file_id r.votes_file
    LEFT JOIN phpbb_users 
    AS u ON f1.user_id u.user_id
    LEFT JOIN phpbb_pa_comments 
    AS cm ON f1.file_id cm.file_id
    WHERE f1
    .file_id  <-- Hier markiert mir phpMyAdmin den Fehler
    IN 
    )
    AND 
    c.cat_id f1.file_catid
    AND f1.file_approved '1'
    GROUP BY f1.file_id
    ORDER BY file_time DESC
    LIMIT 20 
    Als Fehlermeldung bekomme ich:
    PHP-Code:
    #1054 - Unknown column 'f1.file_id' in 'on clause' 
    Auf allen Servern läuft die Mysql Version 5.x
    Was mache ich falsch? Oder liegt es an den Servereinstellungen?

    Das Script stammt übrigens von www.mx-system.com . Ist ein Download File Manager für das phpBB Forum. Es funktioniert sonst einwandfrei. Nur die Suchfunktion läuft nicht auf meinen localen Rechner und bei menem Webhoster.

    Gruß Noreia

  • #2
    Und die Spalte existiert in der Tabelle wirklich?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Ja, die gibt es wirklich. Dieses SQL-Script auf ich auf identischen Datenbanken laufen lassen. Nur eben andere Rechner. Habe jetzt mal mit phpMyAdmin experimentiert. Wenn ich alle Left Joins herausnehme funzt es.
      PHP-Code:
      SELECT f1 . * ,u.user_idu.username
                     
      c.cat_id,  c.cat_name               
      FROM phpbb_pa_files 
      AS f1
           
      phpbb_pa_cat   AS c
      WHERE f1
      .file_id IN )
      AND 
      c.cat_id f1.file_catid
      AND f1.file_approved '1'
      GROUP BY f1.file_id
      ORDER BY file_time DESC
      LIMIT 20 
      Aber warum läuft es nicht mit den Left Joins?

      Gruß Noreia

      Kommentar


      • #4
        Also da steht on-clause, demnach würde ich mal (wieder) davon ausgehen, dass PMA da einen Bug hat.
        Abgesehen davon würde ich mal probieren diese doppelten komma-Select durch einen INNER JOIN zu ersetzen

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Abgesehen davon würde ich mal probieren diese doppelten komma-Select durch einen INNER JOIN zu ersetzen
          Und wie mache ich das?
          Habe ausserdem festgestellt das alle SQL-Abfragen die "Left Join AS ON" enthalten eine Fehlermeldung ausgeben.

          Gruß Noreia

          Kommentar


          • #6
            Bitte Query und Fehlermeldung angeben.

            Kommentar


            • #7
              Gut, die Fehlerkennzeichnung kann man in phpMyAdmin vergessen. Aber die Fehlerausgabe ist echt.
              Die anderen SQL-Scripte unterscheiden sich nur von den Feldern. Die Struktur ist die gleiche.
              Die Syntax ist in Ordnung. Sonst könnte ich die Abfrage ja nicht erfolgreich auf den Rootserver anwenden. Aber warum funktioniert die "Left Join" nicht auf jeden Rechner.
              Datenbank wurde übrigens mit mysqldump und mysq gesichert und auf die anderen Rechner übertragen. Es sind also die selben Tabellen.
              Bitte Query und Fehlermeldung angeben.
              Steht im ersten Post.

              Gruß Noreia

              Kommentar


              • #8
                Probiere die folgenden Queries mal in dieser Reihenfolge:
                Code:
                SELECT * FROM phpbb_pa_files;
                SELECT * FROM phpbb_pa_cat;
                SELECT * FROM phpbb_pa_votes;
                SELECT * FROM phpbb_users;
                SELECT * FROM phpbb_pa_comments;
                SELECT * FROM phpbb_pa_files AS f
                    INNER JOIN phpbb_pa_cat AS c ON c.cat_id = f.file_catid;
                SELECT * FROM phpbb_pa_files AS f
                    INNER JOIN phpbb_pa_cat AS c ON c.cat_id = f.file_catid
                    LEFT JOIN phpbb_pa_votes AS r ON f.file_id = r.votes_file;
                SELECT * FROM phpbb_pa_files AS f
                    INNER JOIN phpbb_pa_cat AS c ON c.cat_id = f.file_catid
                    LEFT JOIN phpbb_pa_votes AS r ON f.file_id = r.votes_file
                    LEFT JOIN phpbb_users AS u ON f.user_id = u.user_id;
                SELECT * FROM phpbb_pa_files AS f
                    INNER JOIN phpbb_pa_cat AS c ON c.cat_id = f.file_catid
                    LEFT JOIN phpbb_pa_votes AS r ON f.file_id = r.votes_file
                    LEFT JOIN phpbb_users AS u ON f.user_id = u.user_id
                    LEFT JOIN phpbb_pa_comments AS cm ON f.file_id = cm.file_id;
                SELECT * FROM phpbb_pa_files AS f
                    INNER JOIN phpbb_pa_cat AS c ON c.cat_id = f.file_catid
                    LEFT JOIN phpbb_pa_votes AS r ON f.file_id = r.votes_file
                    LEFT JOIN phpbb_users AS u ON f.user_id = u.user_id
                    LEFT JOIN phpbb_pa_comments AS cm ON f.file_id = cm.file_id;
                Aber bitte einzeln, da die Fehlermeldungen in PMA bzw. von MySQL sonst irreführen könnten.

                Kommentar


                • #9
                  Hi,
                  Fehler gefunden. Es lag an der MySQL Version. Bei der 5er habe ich diese Probleme, bei der 4er nicht.
                  Warum eigentlich ? Würde es trotzdem gerne wissen.
                  Vielen Dank für eure schnelle Hilfe.

                  Gruß Noreia

                  Kommentar


                  • #10
                    Deine Abfrage ist Käse! MySQL ist Käse!

                    1. wenn du SELECT ... from A, B left join C on a.xx=c.xx => was soll das werden?

                    2. bei verwendung AgregatFuktionen akzeptieren die anderen DBMS niemals SELECT *

                    3. bei Verwendung von AgregatFuktionen muss du immer alle selectierten Spalten gruppieren, außer die, die in den Fktnen selbst als Argument stehen.

                    Wenn du diese Regel nicht beachtest, weil MySQL dummerweise so großzügig ist, kannst du nie sicher sein, dass das Ergebnis immer wie gewollt kommt.

                    4. wenn die Fehlermeldung:

                    #1054 - Unknown column 'f1.file_id' in 'on clause'

                    heißt, und du bei Where den Fehler markierst; Junge, Junge, was machst du denn eigentlich? Programmieren? Wohl kaum!

                    Kommentar


                    • #11
                      Würde es trotzdem gerne wissen.
                      Das funktioniert erst ab MySQL 5:
                      1. wenn du SELECT ... from A, B left join C on a.xx=c.xx => was soll das werden?
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Junge, Junge, was machst du denn eigentlich? Programmieren? Wohl kaum!
                        Stimmt, programmiere nicht selber. Hast wohl überlesen das das Script von www.mx-system.com stammt. Muss ich programmieren lernen wenn ich mir ein Forum mit Downloadbereich einrichten möchte? Wohl kaum. Dann hätte ich ja auch keine Zeit fürs Wesentliche. Ich muss doch nicht erst das Rad erfinden. Seit 2002 bin ich mit der Open Source Software gut gefahren. Das Preis - Leistungsverhältnis stimmt. Nur nach dem Serverwechsel sind die Probleme aufgetaucht. Ausserdem wurde mir durch phpMyAdmin links neben meinem Code eine Warnung ausgegeben. Da dachte ich ab dort wäre der Fehler.
                        Und wenn MySQL 5.x nicht mehr so grosszügig ist wie die Version 4.x, dann hat sich doch meine Frage geklärt.

                        Gruß Noreia

                        Kommentar

                        Lädt...
                        X