kostenloser Webspace werbefrei: lima-city


Kleines Abfrage Problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    jwolff

    Kostenloser Webspace von jwolff, auf Homepage erstellen warten

    jwolff hat kostenlosen Webspace.

    Guten Tach.

    Also ich habe das Problem das ich auf 2 Tabellen gleichzeitig zugreifen möchte und von dort jewals einen Wert haben möchte und sollten diese eintreffen gezählt werde also in etwa so:

    $query = "SELECT count(*) as count FROM `account` WHERE `gmlevel` in (1,2) AND `online`='1'";


    wie man sieht zieh ich so normalerweise aus der Tabelle "account" die Daten das Problem was ich dabei habe ist das in der Tabelle "account" nicht das GMLevel gelistet ist sondern in der Tabelle "account_accres". Die beiden Tabellen sind mit der ID Des Accounts verbunden sprich in "account" hat ein User mit dem Benutzername "Example" die ID "53" dann hat er sie in "account_acces" ebenfalls...

    Könnte mir da vielleicht jemand helfen??
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Versuch es mal mit dieser Abfrage:
    SELECT count(*) as count FROM account 
    INNER JOIN account_acces ON account_acces.ID=account.ID 
    WHERE gmlevel in (1,2) AND online='1'
    Das liefert Dir allerdings nur dann die richtige Anzahl, wenn maximal jeweils ein Eintrag in account_access einem Eintrag in account zugeordnet ist, oder, anders ausgedrückt, wenn z.B. ID sowohl in account als auch in acount_access UNIQUE KEYs sind. Falls Du in acount_access einem Eintrag in account auch mehrere Access-Levels zugeordnet haben solltest, kannst Du das ganze über eine Unterabfrage lösen:
    SELECT count(*) as count FROM account WHERE online='1' AND ID in
    (SELECT ID FROM acount_access WHERE gmlevel IN (1,2) ))


    Beitrag zuletzt geändert: 15.3.2010 7:49:38 von cars-ten
  4. Hi

    das mit dem Count is toll, aber ich glaub net das es zum gewünschten Effekt hinführt.
    Was is wenn in einer Tabelle ein Eintrag fehlt? :)

    Erstes Beispiel mit 2 Tabellen:

    SELECT eins.id AS eins_id, zwei.id AS zwei_id FROM eins LEFT JOIN zwei ON (zwei.aid = eins.aid) WHERE ....


    Hier mit 3 Tabellen:

    SELECT eins.id AS eins_id, zwei.id AS zwei_id, drei.id AS drei_id FROM eins LEFT JOIN zwei ON (zwei.aid = eins.aid) LEFT JOIN drei ON (drei.aid = eins.aid) WHERE .....


    Ich weis nicht ob du damit zurecht kommst, deswegen werd ich eben ein wenig mehr erläutern.

    Jede der Tabellen hat einen Primärschlüssel ich nenne ihn "id". Ich selectiere alle IDs in den Tabellen, diese sind später auch meine Bezeichnungen in dem Array, das ich ausgeben werde.
    .aid ist ein Eintrag der in der ersten und in der zu vergleichenden Tabelle gleich sein muss, als Identifikation oder so ...

    Das LeftJoin holt jetzt alle Daten, ob vollständig oder nicht. Das Array wird mit mysql_fetch_array() gebildet.

    Jetzt kannst dir das Array ansehen mit print_r($dein_array); und es entsprechend sortieren und zählen.

    Ich hoffe es is einigermaßen verständlich, musst halt bissl probieren.

    Grüsse
    Color
  5. Autor dieses Themas

    jwolff

    Kostenloser Webspace von jwolff, auf Homepage erstellen warten

    jwolff hat kostenlosen Webspace.

    Also ich habe bei allen den gleichen Fehler bei meiner Schleife sollte ich eines ausprobieren....

    Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\acc\wow\serverstatus\index.php on line 15
  6. Die Meldung
    mysql_result() expects parameter 1 to be resource, boolean given
    besagt lediglich, dass die mit mysql_query() abgeschickte Abfrage als Rückgabewert einen logischen Wert zurückgegeben hat. Ein Zeichen dafür, dass in der Abfrage womöglich ein Syntaxfehler versteckt war oder eine nicht existierende Spalte referenziert wurde. Um Klarheit zu bekommen, solltest Du Deine Abfrage mit einer Fehlerausgabe kombinieren (zumindest während der Debug-Phase)
    $result = mysql_query("SELECT count(*)  FROM account WHERE online='1' AND ID in
                    (SELECT ID FROM acount_access WHERE gmlevel IN (1,2) ))");
    if ($result)  list($anzahl)=mysql_fetch_row($result); 
    else echo 'Fehler in Datei'.__FILE__.' Zeile '.__LINE__.': '.mysql_error();
    // falls kein Fehler auftreten sollte kannst Du 
    // die gesuchte Zahl in $anzahl weiterverwenden ...
    dann weißt Du zumindest, WAS da nicht gepasst hat ...

    Ich habe mal ein paar Beispieltabellen erstellt:
    CREATE TABLE account (ID int, name varchar(80),online int, PRIMARY KEY (ID));
    CREATE TABLE account_access (ID int,gmlevel int, grp int, PRIMARY KEY (ID))
    darin ein paar Werte untergebracht:
    INSERT INTO account VALUES (1,'a',1),(2,'b',1),(3,'c',0),(4,'d',1),(5,'e',0),(6,'f',1);
    INSERT INTO account_access VALUES (1,1,3),(2,0,3),(3,2,3),(4,2,3),(5,0,3),(6,1,3)
    und es dann damit ausprobiert:
    select count(*) anzahl from account where online='1' AND id in
    (select id from account_access where gmlevel in (1,2))
    Als Ergebnis habe ich die Zahl
    $anzahl = 3
    bekommen, was ich auch so erwartet habe: Es gibt genau Drei "Leute", die den gmlevel 1 oder 2 haben und "online" sind (online=1).

    Beitrag zuletzt geändert: 15.3.2010 17:23:45 von cars-ten
  7. Autor dieses Themas

    jwolff

    Kostenloser Webspace von jwolff, auf Homepage erstellen warten

    jwolff hat kostenlosen Webspace.

    In soweit hab ich es auch ausprobiert und ausgeführt am ende hatte ich das Problem das er die 2te Tabelle nicht abfragen konnte weiß der geier warum.

    So hab ich´s jetzt allerdings gelöst:

    mysql_select_db("account_access", $conn);
    $onlinegmc_gmrealm = mysql_query("SELECT id FROM account_access WHERE gmlevel in (2,3,4,5,6,7) AND realmid = '9'", $conn) or die(mysql_error());
       $onlinegms_gmrealm = "--";
       for($y = 0; $y < mysql_num_rows($onlinegmc); $y++) {
        $get_id_gmrealm = mysql_fetch_row($onlinegmc_gmrealm);
    mysql_select_db("account", $conn);
        $onlinegm_gmrealm = mysql_query("SELECT count(guid) as count FROM `characters` WHERE `online`='1' AND account in ($get_id[0])", $conn);
        $onlinegms_gmrealm += mysql_fetch_object($onlinegm_gmrealm)->count;
       }


    PS: Damit ihr wisst wofür das ganze:

    http://universe-gaming.ath.cx/acc/wow/serverstatus/?page=home

    Beitrag zuletzt geändert: 17.3.2010 13:27:02 von jwolff
  8. 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!