UndSo: Querys zusammenführen

Hallo Forum, eine kleine Frage.

String checken="select count(*) from bla_tabelle where meineUSERID=1 and andereUSERID=2;"

Habe eine Query, mit der ich Überprüfe, ob ich eine Bewertung für einen anderen User abgegeben habe.
Falls für count(*) oben 1 rauskommt habe ich eine Bewertung abgegeben und müsste dann noch auslesen, mit wieviel Punkten ich bewertet habe.

String gegebenePunkte="select punkte from bla_tabelle where meineUSERID=1 and andereUSERID=2;"

Kann ich denn die beiden Querys zusammenfassen und eine Query sparen, indem ich daraus ein Array mache?
Habe es einwenig probiert aber nicht hingekriegt mit dem count(*). Das Problem dann auch, sobald es keine Bewertung vorhanden ist, bringt er wahrscheinlich einen Fehler, falls er in dem Query die Spalte "punkte" auslesen will ne?

String[] checken="select count(*), punkte from bla_tabelle where meineUSERID=1 and andereUSERID=2;"

Noch eine Frage nebenbei.
Kann man zwei Summen-Abfragen auch in einer Query ausführen?

String summe_hits="select sum(hits) from bla_tabelle where andereUSERID=2;"
String summe_points="select sum(punkte) from bla_tabelle where andereUSERID=2;"

String[] gesamtePunkte="select sum(hits), sum(punkte) from bla_tabelle where andereUSERID=2;"

Grüße
undso
mysql 4.1.10

  1. Hallo

    String gegebenePunkte="select punkte from bla_tabelle where meineUSERID=1 and andereUSERID=2;"
    Kann ich denn die beiden Querys zusammenfassen und eine Query sparen,

    Ja, lasse einfach die erste Abfrage weg. Die ist überflüssig.

    indem ich daraus ein Array mache?

    Nein. Ich vermute, Dein Kram ist PHP. PHP interessiert das Datenbankmanagementsystem kein bißchen.

    Das Problem dann auch, sobald es keine Bewertung vorhanden ist, bringt er wahrscheinlich einen Fehler, falls er in dem Query die Spalte "punkte" auslesen will ne?

    Nein, sofern die Abfrage syntaktisch korrekt ist. Warum sollte es eine Fehlermeldung geben? Es ist völlig normal, dass eine Abfrage keinen Datensatz zurückliefert. Reagiere entsprechend auf dieses Ergebnis.

      
    
    > SELECT  
    >     SUM(hits),  
    >     SUM(punkte)  
    > FROM bla_tabelle  
    > WHERE andereUSERID = 2
    
    

    ist völlig normales SQL - hat aber überhaupt nichts mit irgendwelchen Arrays von Zeichenketten zu tun.

    Freundliche Grüße

    Vinzenz

    1. Hallo, vielen Dank.

      Hätte noch eine andere Frage. Ist es Pflicht, wenn man mit INNER JOIN zwei Tabellen verbindet, das ON A.bla=B.bla anzuegen oder kann man zwei Tabellen ohne bestimmtes Kriterium verbinden?

      Grüße

      1. yo,

        Ist es Pflicht, wenn man mit INNER JOIN zwei Tabellen verbindet, das ON A.bla=B.bla anzuegen oder kann man zwei Tabellen ohne bestimmtes Kriterium verbinden?

        es ist keine pflicht, aber es macht in den meisten fällen keinen sinn, die join-bedigung wegzulassen.

        Ilja

        1. hi,

          es ist keine pflicht, aber es macht in den meisten fällen keinen sinn, die join-bedigung wegzulassen.

          jep stimmt, aber mit der Bedingung kann ich die Tabellen nicht verbinden. Ich wollte das Bildervoting evtl. mit einem Filter einschränken, damit die Bilder nicht erscheinen, die ich schonmal bewertet habe. Diese erscheinen ja immer mit ORDER BY RAND() zufällig.

          Einen Filter wie: Nur Mädels bewerten oder Jungs bewerten ginge problemlos.

          Grüße

        2. Hi nochma,

          Hallo ilya, hab jetzt doch ein Problem:

          Die Zufallsprofilbilder werden so erzeugt:

          select userid, name, bild, bildauswahl, alter from bla_usertabelle where bildauswahl <> '0' ORDER BY RAND() LIMIT 1;

          Tabelle usertabelle
          userid  name bild   bildauswahl  alter
          1  peter ../bild.jpg  2    20
          2  hans ../hans.jpg  2    19
          3  gudrun ../ha.jpg  2    23

          Die Bewertungen werden dann in

          bla_photovoting gespeichert:
          userid  derBewertete punkte
          1   3    10
          3   3    8

          Hab jetzt versucht mit INNER JOIN beide Tabellen zu verbunden und nur ein Zufallsbild zu erzeuchen, für das ich nicht gevotet habe

          select B.userid, B.name, B.bild, B.bildauswahl, B.alter from bla_photovoting AS A INNER JOIN bla_usertabelle AS B where A.derBewertete...(Ach, hier hakts ;).. AND B.bildauswahl <> '0' ORDER BY RAND() LIMIT 1;

          1. yo,

            Hallo ilya, hab jetzt doch ein Problem:

            Ilja nicht ilya, soviel zeit muss sei ;-)

            select userid, name, bild, bildauswahl, alter from bla_usertabelle where bildauswahl <> '0' ORDER BY RAND() LIMIT 1;

            keine ahnung, was dort das \ zeichen bewirkt, ich tippe mal auf einfach nur vertippt. Aber das andere was mir auffält, du persistierst doch nicht etwa das alter in der datenbank oder ?

            Hab jetzt versucht mit INNER JOIN beide Tabellen zu verbunden und nur ein Zufallsbild zu erzeuchen, für das ich nicht gevotet habe

            du schränkst auf dich ein und bildest dann einen outer join, wo du nach null einer spalte von bla_photovoting abfragst.

            Ilja

            1. Oooh, danke für den Tipp ilja, das mit dem outer join ist für mich jetzt ganz neu.
              Könntest du konkret an meinem Beispiel die Query mit outer join zusammenbasteln, falls es wirklich nicht allzu aufwendig ist.

              Werde mir aber heute abend mehr überblich über "outer joins" verschaffen, wenn ich es hinkriege melde ich mich.

              Was meinst eigentlich mit "persistieren"?? Habs nicht gerafft.
              Sorry bin "Außengeländer" *gg

              Grüße

              1. yo,

                Werde mir aber heute abend mehr überblich über "outer joins" verschaffen, wenn ich es hinkriege melde ich mich.

                wenn du die abfrage nicht hinbekommst, dann kann ich sie dir herleiten und hier posten. aber versuch es erst einmal selbst.

                Was meinst eigentlich mit "persistieren"?? Habs nicht gerafft.

                das bedeutet soviel wie festhalten der daten in der datenbank. das alter dort "zu speicher" macht nicht wirklich sinn, da du ja jedesmal den datenbestand auffrischen musst, wenn jemand alter geworden ist. deshalb ist es besser, das geburstdatum in der datenbank zu persitieren und daraus dann das alter zu berechen.

                Ilja

                1. Hi,
                  vielen Dank. habs gestern leider nicht geschafft, werde aber heute mich etwas mehr mit outer join beschäftigen, falls es nicht klappt, poste ich nochmal hier und hoffe, dass das thema nicht zu weit nach hinten rutscht und du es übersiehst ;)

                  wir haben das geburtsdatum als auch das alter drin. um nicht jedesmal das alte neu zu berechnen, läuft jeden abend ein cronjob ab und berechnet für alle mitglieder das alter. ist das nicht sinnvoll so?

                  grüße

                  1. yo,

                    wir haben das geburtsdatum als auch das alter drin. um nicht jedesmal das alte neu zu berechnen, läuft jeden abend ein cronjob ab und berechnet für alle mitglieder das alter. ist das nicht sinnvoll so?

                    ich würde prozessdaten nicht hart persitieren, solange es dafür nicht gründe (zum beispiel performance) gibt. es ist eine fehlerquelle mehr, in die man tappen kann.

                    Ilja

            2. Hi,

              select userid, name, bild, bildauswahl, alter from bla_usertabelle where bildauswahl <> '0' ORDER BY RAND() LIMIT 1;

              Aber das andere was mir auffält, du persistierst doch nicht etwa das alter in der datenbank oder ?

              Nicht nur das, alter ist normalerweise in den mir bekannten SQL-Varianten auch noch ein reserviertes Wort, das ungequotet als Spaltenname Probleme macht.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              O o ostern ...
              Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.