[SQL allgemein] Wenn kein DS, dann anderen DS ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Dankesehr!
    Sehr schöne Funktion "COALESCE" !!

    Meine wohl etwas unelegantere Lösung ó_Ò

    PHP-Code:
    SELECT        COALESCE(u_s.setting"color") as setting,
                                                    
    u_s.value
                                            FROM    user_setting u_s
    ,
                                                    
    user u
                                            WHERE    u
    .id 17
                                            
    AND     u.color u_s.id 

    Kommentar


    • #17
      Ich habe mit der Funktion gleich mal ein wenig rumgebastelt und bin wiedermal auf eine kleine Frage gestoßen.
      (Die sollte echt klein sein ó_Ò)
      Ich Prüfe ob ein user geblockt wird, jemanden blockt oder beide sich gegenseitig blocken.
      Je nachdem soll dann ein jeweiliger Text angezeigt werden.
      Um diesen Text anzeigen zu können, benötige ich eine eindeutige Nummer anhand derer ich unterscheiden kann um welche Art des Blockes es sich handelt.

      Die Query:
      PHP-Code:
      SELECT        COALESCE((SELECT id FROM user_block WHERE user_to 17 AND user_from 21
                                          
      AND user_to 21 AND user_from 17),
                                          (
      SELECT id FROM user_block WHERE user_to 17 AND user_from 21),
                                          (
      SELECT id FROM user_block WHERE user_to 21 AND user_from 17)) AS blockstatus
                                          FROM    user_block 
      Jetzt wird "blockstatus" zu Testzwecken lediglich irgend ein Zellenwert (in dem Fall einfach mal id)
      Kann ich es so anstellen, dass wenn bei der ERSTEN Abfrage von COALESCE ein Ergebnis kommt, nur eine Zelle ausgegeben wird mit z.B. dem Wert "Beide blocken sich" und wenn die zweite Abfrage von COALESCE kommt, dann "Der User blockt dich" oder aber auch "Du blockst den User" (je nachdem).

      wie mache ich sowas?

      Kommentar


      • #18
        Das würde ich ganz anders lösen:
        Code:
        SELECT COUNT(*) AS blockstatus, SUM(user_to) as user_to
        FROM user_block
        WHERE (user_to = 17 AND user_from = 21) OR (user_to = 21 AND user_from = 17)
        Code:
        blockstatus = 0 => kein Block
                    = 1 => user_to = der geblockte Benutzer
                    = 2 => beide blockieren sich

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #19
          Original geschrieben von ghostgambler
          Das würde ich ganz anders lösen:
          Code:
          SELECT COUNT(*) AS blockstatus, SUM(user_to) as user_to
          FROM user_block
          WHERE (user_to = 17 AND user_from = 21) OR (user_to = 21 AND user_from = 17)
          Code:
          blockstatus = 0 => kein Block
                      = 1 => user_to = der geblockte Benutzer
                      = 2 => beide blockieren sich
          Sehr schön.
          Ich glaube, da brauche ich einfach mehr "Erfahrung" um auf solche Wege zu kommen.
          Dankesehr.

          ABER! Falls ich später einmal auf das Problem wie im vorherigen Post stoße, indem ich bei einer SELECT Abfrage eine eindeutige Kennzahl brauche, wie kann ich das erreichen?

          Sprich, könntest du mir noch kurz einen Tipp zum Block-Post von mir geben?
          Dankeschön !!

          Kommentar


          • #20
            Du kannst doch einfach bei den Subselects aus dem
            SELECT id
            jeweils ein
            SELECT "1", SELECT "2" bzw. SELECT "3"
            machen, dann hast du doch deine gewünschte "Kennzahl".

            Dir sollte aber auch hoffentlich aufgehen, dass der Query nicht wirklich hübsch ist den du da gebaut hast (lang, klobig, komisch; das ist tendenziell ein Indiz dafür, dass es anders/schöner geht) - und Subselects sind bei MySQL potentiell eh keine guten Kandidaten (weil diese nicht so gut optimiert werden).

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #21
              Original geschrieben von ghostgambler
              Du kannst doch einfach bei den Subselects aus dem
              SELECT id
              jeweils ein
              SELECT "1", SELECT "2" bzw. SELECT "3"
              machen, dann hast du doch deine gewünschte "Kennzahl".

              Dir sollte aber auch hoffentlich aufgehen, dass der Query nicht wirklich hübsch ist den du da gebaut hast (lang, klobig, komisch; das ist tendenziell ein Indiz dafür, dass es anders/schöner geht) - und Subselects sind bei MySQL potentiell eh keine guten Kandidaten (weil diese nicht so gut optimiert werden).
              Ja, du hast natürlich recht!
              Vielen Dank für deine Hilfe.
              Hast mir echt sehr geholfen

              Kommentar


              • #22
                Original geschrieben von ghostgambler
                Du kannst doch einfach bei den Subselects aus dem
                SELECT id
                jeweils ein
                SELECT "1", SELECT "2" bzw. SELECT "3"
                machen, dann hast du doch deine gewünschte "Kennzahl".

                Dir sollte aber auch hoffentlich aufgehen, dass der Query nicht wirklich hübsch ist den du da gebaut hast (lang, klobig, komisch; das ist tendenziell ein Indiz dafür, dass es anders/schöner geht) - und Subselects sind bei MySQL potentiell eh keine guten Kandidaten (weil diese nicht so gut optimiert werden).
                Ja, du hast natürlich recht!
                Vielen Dank für deine Hilfe.
                Hast mir echt sehr geholfen

                Kommentar

                Lädt...
                X