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.
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 
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!
|
|