Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

[MYSQL] Brauche dringend hilfe

TheBrainless - 38
Experte (offline)

Dabei seit 04.2005
1992 Beiträge

Geschrieben am: 05.11.2006 um 21:24 Uhr
Zuletzt editiert am: 06.11.2006 um 21:55 Uhr

Auch wenn ich normalerweiße für Eindeutige Threadnamen bin, das Problem das ich jetzt habe lässt sich glaub ich nich so einfach beschreiben...
Folgendes:
Ich hab 2 mysql-querys:

"SELECT COUNT(*) as allmessages FROM `table` WHERE (`message_sender` = 'nickname' AND `message_read` = '0' AND `message_sender_del` = '0')"

und

"SELECT COUNT(*) as unreadmessages FROM `uu_messages` WHERE(`message_sender` = 'nickname' AND `message_sender_del` = '0')"

Bis auf das `message_read` = '0' sind die beiden also idententisch. Würde mich nu interrsieren ob ich die beiden querys in eins packen könnte, sprich zuerst alle messages und dann aus dem ergebniss noch die ungelesenen filtern...

Mörps mörps blubbs!

Nitek - 41
Champion (offline)

Dabei seit 01.2003
4129 Beiträge

Geschrieben am: 05.11.2006 um 21:35 Uhr

Also zum einen sollte man Integerwerte nicht in ' schreiben, weil MySQL die sonst zunächsteinmal wie eine String behandelt...
Verknüpfen könnntest die Abfragen mit einem UNION dazwischen, aber ob das viel bringt ist fraglich.

Is übrigens ne Mysql-Frage und nicht für PHP ;-)
spectre - 42
Halbprofi (offline)

Dabei seit 04.2003
181 Beiträge
Geschrieben am: 05.11.2006 um 22:00 Uhr

(btw: die tables sind auch unterschiedlich)

du willst quasi 2 counts mit verschiedenen konditionen in einem statement?
mhh... ne lösung ist mir da nicht bekannt (jedenfalls nichts einfaches - allerhöchstens vielleicht über union). kommst wohl um die 2 abfragen nicht rum, wie ich das sehe.
MeganeOtoko
Fortgeschrittener (offline)

Dabei seit 03.2006
67 Beiträge
Geschrieben am: 05.11.2006 um 22:43 Uhr

ich geh mal davon aus, dass die Tabellen identisch sein sollen. Dann ist tatsächlich nur ein Parameter unterschiedlich. Wenn du diese Abfrage häufig durchführen willst könntest du eine view defineren.
create view teilabfrage
as SELECT COUNT(*) as unreadmessages FROM `uu_messages` WHERE(`message_sender` = 'nickname' AND `message_sender_del` = '0')

dann kannst du mit select from teilabfrage where message_read = 0 den Rest filtern. Benötigst du die view nicht mehr kannst du sie mit
drop view teilabfrage;
wieder löschen.
Hope this helps.
fastsnake - 37
Halbprofi (offline)

Dabei seit 01.2005
120 Beiträge

Geschrieben am: 06.11.2006 um 00:01 Uhr

die scheisse hat ich auch hatt ich alles runtergeschmissen und erst ma ne weile drauf geschissen dann neues PHP gezogen und ich bekomms net mehr ma hin das scheissteil zum install lol
und mysql is eh die beschissenst datenbank wo es gibt
MeganeOtoko
Fortgeschrittener (offline)

Dabei seit 03.2006
67 Beiträge
Geschrieben am: 06.11.2006 um 09:29 Uhr

Zitat von fastsnake:

die scheisse hat ich auch hatt ich alles runtergeschmissen und erst ma ne weile drauf geschissen dann neues PHP gezogen und ich bekomms net mehr ma hin das scheissteil zum install lol
und mysql is eh die beschissenst datenbank wo es gibt


Also zum einen geht es hier um ein SQL und nicht um ein PHP Problem. Da verwechselst du was, aber der Windoof-Ansatz von "deinstallieren, neuinstallieren, wird schon gehen" klingt ... interessant. :-D
MySQL ist bestimmt nicht die ***-DB die es gibt, du kennst nur nicht besonders viele Datenbanken.
Caarcrinolas - 41
Profi (offline)

Dabei seit 02.2006
909 Beiträge

Geschrieben am: 06.11.2006 um 14:45 Uhr

Zitat von fastsnake:

und mysql is eh die beschissenst datenbank wo es gibt

Du bezeichnest Mysql als beschissen?
Nun und ich halte von Typen nichts die:
a) kein ANSI-SQL schreiben (AS wozu?)
b) ein verkorkstes DB-Modell besitzen (Wenn man generell User spezifische Werte holen muss macht es wohl eher Sinn, das diese Information in der User Table vorhanden ist)
Soll heissen:
Es wird immer die gleiche Information gespeichert, nämlich das es x unread Posts und y read Posts gibt pro Zeile ! Du brauchst keine Datenbank sondern eine Textdatei !
Nun wenn ich immer die User Table brauchen um diese mit einer Session Table zu assoiziere, kann ich sinngemäß auch diese unread/read Spalten in die User Table integrieren und diese bei einer Aktion inkrementieren/dekrementieren.

Anstatt Mysql über eine großwerdende Table zu jagen nur um diese zu gruppieren und diese Werte zu ermitteln.....

Wenn man die PNs anschaut wird damit meistens ein Popup verbunden...
User X schreibt User Y eine PN -> Poput kommt und zeigt die ungelesene Anzahl an neuen Posts an....

Nach deiner Denkweise.... *no comment*

c) ihre eigene Unfähigkeit zum Ausdruck bringen indem sie eine recht gute Webdatenbank einen schlechten Ruf einbringen.

Ach ja zu deinem "Brauche dringend Hilfe". Wer sich gegenüber Anderen wichtiger macht als er es selbst ist, hat gemäß Netiquette grundsätzlich verloren weil er ein sog. "Troll" ist und stillschweigend ignoriert wird.

Daher bleibt mir nur zu bermerken "Wenn du anfangen würdest zu brennen, wärs mir egal es sei denn du gefährdest Andere"

Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."

TheBrainless - 38
Experte (offline)

Dabei seit 04.2005
1992 Beiträge

Geschrieben am: 06.11.2006 um 17:21 Uhr
Zuletzt editiert am: 06.11.2006 um 21:59 Uhr

Zitat von MeganeOtoko:

ich geh mal davon aus, dass die Tabellen identisch sein sollen. Dann ist tatsächlich nur ein Parameter unterschiedlich. Wenn du diese Abfrage häufig durchführen willst könntest du eine view defineren.
create view teilabfrage
as SELECT COUNT(*) as unreadmessages FROM `uu_messages` WHERE(`message_sender` = 'nickname' AND `message_sender_del` = '0')

dann kannst du mit select from teilabfrage where message_read = 0 den Rest filtern. Benötigst du die view nicht mehr kannst du sie mit
drop view teilabfrage;
wieder löschen.
Hope this helps.


öhm, ja gut, es ist mysql, aber die abfragen mach ich in nem php-script... sorry für den fehler...
und jepps, die tabelle soll identisch sein, wie du richtig erkannt hast... das mit den views werd ich mir mal angucken... union bringt wie schon richtig erkannt nicht wirklich etwas^^
aber die abfrage sieht ganz gut aus :daumenhoch:

EDIT: an den über mir... klar, mein thread ist auch nich wichtiger als andere... aber meine erfahrung zeigt leider das bei solchen threads am ehesten was rauskommt... naja, da sich mein problem ja nu gelöst hat mit dem view kann man den thread gern schließen...

Mörps mörps blubbs!

Marius89 - 42
Halbprofi (offline)

Dabei seit 06.2004
126 Beiträge

Geschrieben am: 30.12.2006 um 12:17 Uhr
Zuletzt editiert am: 30.12.2006 um 12:19 Uhr

Ich hätt auch mal ne Frage zu PHP und Mysql.

Wird das in der Praxis wirklich so gemacht, dass die Logindaten für den Mysql Server in einer php datei gespeichert sind.
also zum Beispiel:

$con = mysql_connect("localhost:3306","root","password");
mysql_select_db("my_db", $con);
//Anweisungen
mysql_close($con);


Schon klar, dass die Nutzer im Normalfall nichts von der Datei sehen, aber es kommt ja z.B. ab und an mal vor, dass man sich doch ne PHP Datei mit nem Downloadmanager ziehen kann.

Ich möcht eigentlich nur wissen, ob das so ein Sicherheitsrisiko ist oder ob ich dass ohne Bedenken so tun kann.

McPommes - 51
Experte (offline)

Dabei seit 09.2006
1422 Beiträge
Geschrieben am: 30.12.2006 um 12:51 Uhr

Eine Idee, so gehts im Sql-Server. Vielleicht bietet MySql ja auch was ähnliches.
Mit CASE kannst du Fallunterscheidungen machen. Du könntest also mit
SELECT COUNT(*) AS alles,
COUNT( CASE WHEN (message_read = 0) THEN 1 ELSE 0 END ) AS ungelesen
FROM Tabelle
WHERE sender = ...
GROUP BY sender
mehrere Fälle innerhalb einer Gruppierung zählen.
D.h. es kommt eine Gruppierung zurück, innerhalb der du mit dem CASE bestimmst, ob 1 oder 0 summiert werden soll. Trifft die Bedingung zu, wird 1 addiert, sonst 0.

Das ist allerdings nicht gerade übersichtlich (und ich weiß nicht ob MySql das kennt), in deinem Fall tut es ein UNION sicher auch, dann weißt du was passiert.


@Caarcrinolas, warum kein AS verwenden?
Mit einem Index auf die Tabelle lässt sich die Sucherei bestimmt ziemlich kurz halten. Textdateien verwalten ist auch nicht schön und schnell.

@Marius89, kann man mit einem Downloadmanager wirklich Scripte als Source ziehen? Der Server führt die Dinger doch in jedem Fall aus. Oder wie meinst du das?


*** diese Fusszeile verschwendet 45 Bytes ***

TheBrainless - 38
Experte (offline)

Dabei seit 04.2005
1992 Beiträge

Geschrieben am: 30.12.2006 um 13:27 Uhr

Zitat von McPommes:

Eine Idee, so gehts im Sql-Server. Vielleicht bietet MySql ja auch was ähnliches.
Mit CASE kannst du Fallunterscheidungen machen. Du könntest also mit
SELECT COUNT(*) AS alles,
COUNT( CASE WHEN (message_read = 0) THEN 1 ELSE 0 END ) AS ungelesen
FROM Tabelle
WHERE sender = ...
GROUP BY sender
mehrere Fälle innerhalb einer Gruppierung zählen.
D.h. es kommt eine Gruppierung zurück, innerhalb der du mit dem CASE bestimmst, ob 1 oder 0 summiert werden soll. Trifft die Bedingung zu, wird 1 addiert, sonst 0.

Das ist allerdings nicht gerade übersichtlich (und ich weiß nicht ob MySql das kennt), in deinem Fall tut es ein UNION sicher auch, dann weißt du was passiert

@Caarcrinolas, warum kein AS verwenden?
Mit einem Index auf die Tabelle lässt sich die Sucherei bestimmt ziemlich kurz halten. Textdateien verwalten ist auch nicht schön und schnell..


Ich werds mal ausprobiern ob das funktioniert... Wobei es mich wundert das jemand so nen alten Thread rausgekramt hat xD

Zitat von McPommes:


@Marius89, kann man mit einem Downloadmanager wirklich Scripte als Source ziehen? Der Server führt die Dinger doch in jedem Fall aus. Oder wie meinst du das?


Normalerweiße erhällt man nur den Html-Code wenn man die Scripte runterläd... Ich wüsste auch nicht wie man das verschlüsseln könnte...
Hier wurde auch schon mal darüber diskutiert...

Mörps mörps blubbs!

  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -