Kleines Abfrage Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anzahl
array
auftreten
ausprobieren
bekommen
code
datum
eins
eintrag
fehler
geier
identifikation
kombinieren
list
paar
parameter
problem
schleife
tabelle
-
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?? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Versuch es mal mit dieser Abfrage:
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 INNER JOIN account_acces ON account_acces.ID=account.ID WHERE gmlevel in (1,2) AND online='1'
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 -
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 -
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
-
Die Meldung
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)mysql_result() expects parameter 1 to be resource, boolean given
dann weißt Du zumindest, WAS da nicht gepasst hat ...$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 ...
Ich habe mal ein paar Beispieltabellen erstellt:
darin ein paar Werte untergebracht: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))
und es dann damit ausprobiert: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)
Als Ergebnis habe ich die Zahlselect count(*) anzahl from account where online='1' AND id in (select id from account_access where gmlevel in (1,2))
bekommen, was ich auch so erwartet habe: Es gibt genau Drei "Leute", die den gmlevel 1 oder 2 haben und "online" sind (online=1).$anzahl = 3
Beitrag zuletzt geändert: 15.3.2010 17:23:45 von cars-ten -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage