wenn zeile nicht vorhanden, dann nimm andere

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

  • wenn zeile nicht vorhanden, dann nimm andere

    hallo forum,

    ich bin absoluter neuling, kann zwar die nötigen sql-queries, wie select, update usw. aber das ist jetzt mal etwas schwieriger.

    Und zwar habe ich in einer tabelle "sprache" meine sprachen angelegt.
    spalte1: sprach_id, spalte2 : sprache
    1,e
    2,d
    3,f

    In einer zweiten tabelle habe ich artikel und zwar sind hier manche artikel mehrmals eingetragen, wobei gleiche artikel sich nur durch den eintrag in der spalte sprach_id unterscheiden.
    diese tabelle ist so aufgebaut:
    spalte1: artikel_id, spalte2: artikel, spalte3: bemerkung, spalte4: sprach_id

    nun möchte ich alle artikel aufrufen. die standardsprache ist d. ist der artikel mit der sprach_id 1 nicht vorhanden, so soll automatisch der gleiche artikel genommen werden, aber mit der sprach_id 2 für e.

    wie kann ich das lösen?

    besten dank

  • #2
    lies mal das hier und beschäftige dich auch mit dem IF() von mysql.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      hab schonmal alles durchgelesen und hat mir auch geholfen.

      mein query lautet momentan:

      PHP-Code:
      SELECT 
          a
      .artikel_ida.text1a.text2a.sprach_ids.spraches.sprach_id,
          IF ( 
      a.sprach_id=3a.sprach_id=2a.sprach_id=1Ausgewaehlte_Sprache
      FROM artikel a
          INNER JOIN sprache s ON a
      .sprach_id s.sprach_id
      GROUP BY artikel_id 

      das funzt soweit auch, es werden mir alle artikel angezeigt auch in verschiedenen sprachen. nur einen artikel hab ich in allen drei sprachen angelegt, wobei der erste der ist mit der sprach_id 1, der zweite der mit der sprach_id 2 und der dritte der mit der sprach_id 3.

      in meiner ausgabe kommt aber der mit der sprach_id 1 und nicht der mit der sprach_id 3.

      Kommentar


      • #4
        ich blick grad nicht durch deine gedankengänge ....
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          ich hab war irgendwie eine geistig umnachtet! was ich geschrieben habe war ja völlige sch....

          also nochmals, ich habe vier sprachen, die ich auswählen kann.
          1=deutsch, 2=englisch, 3= französisch, 4=italienisch

          hat sich jemand für französich entschieden und möchte natürlich alle artikel
          in seiner ausgewählten sprache angezeigt bekommen, dann hab ich ja als query:

          PHP-Code:
          SELECT FROM artikel WHERE sprach_id=
          nun möchte ich, das wenn ein Artikel nicht in französisch angelegt ist, der gleiche Artikel angezeigt wird, nur in englisch. falls dieser auch nicht angelegt ist, soll dafür der deutsche Artikel erscheinen. die anderen Artikel sollen aber trotzdem in französich erscheinen.

          Deshalb hab ich dann meinen query so gestaltet:
          PHP-Code:
          SELECT 
          FROM artikel
          WHERE sprach_id 
          = IF ( sprach_id '3''3''2')        
          GROUP BY artikel_id 
          es geht ja auch, aber wie kann ich das If so verschachteln, das in der dritten Ebene definitiv deutsch als sprache kommt und nicht vielleicht ein artikel auf italienisch?

          Kommentar


          • #6
            if(bed,wahr,if(bed,wahr,if(bed,wahr,falsch))) usw., wo liegt das Problem
            das ist stinknormale Verschachtelung.

            Kommentar


            • #7
              also so einfach ist es irgendwie nicht:

              erst hab ich es so probiert:
              PHP-Code:
              SELECT 
              FROM artikel
              WHERE sprach_id 

                  IF ( 
              sprach_id 'f''f', IF ( sprach_id 'e''e', IF ( sprach_id 'd''d','')))    
              GROUP BY artikel_id
              ORDER BY  artikel_id 
              Ergebnis: es gibt mir immer die deutschen aus, ausser es ist kein deutsche artikel vorhanden


              dann so:
              PHP-Code:
              SELECT 
              FROM artikel
              WHERE sprach_id 

                  IF ( 
              sprach_id 'f''f', IF ( sprach_id != 'f''e''d'))
              GROUP BY artikel_id
              ORDER BY  artikel_id 
              ergebnis: hier gibt es mir die richtigen aus, nur den artikel, wo es nur einen deutschen gibt verschluckt er mir

              was ist falsch?

              Kommentar


              • #8
                mach mal vor und nach ( keine leerzeichen. eins davon mag mysql nicht.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  ich hab jetzt mal alle leerzeichen bei beiden queries entfernt, aber die ausgabe ist immer noch gleich.

                  beim ersten erfolgt immernoch hauptsächlich die ausgabe in deutsch, beim zweiten bringt er mir den datensatz nicht, der nur in deutsch, aber nicht in franz und engl. angelegt ist.

                  Kommentar


                  • #10
                    Code:
                    IF (sprach_id != 'f',
                      IF (sprach_id != 'e',
                        'd',
                        'e'),
                      'f')
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      jetzt hab ich es so gemacht wie mrhappiness es geschrieben hat:

                      PHP-Code:
                      SELECT 
                      FROM artikel
                      WHERE sprach_id 
                      = IF(sprach_id!='f',IF(sprach_id != 'e','d','e'),'f')
                      GROUP BY artikel_id
                      ORDER BY  artikel_id 
                      jetzt kommen zwar alle datensätze, es wird aber immer auf deutsch zurückgegriffen, falls vorhanden. gibt es einen datensatz mit deutsch und französich, so kommt der deutsche.

                      Kommentar


                      • #12
                        dann tausch die werte, so dass es passt oder befass dich mit JOIN und der suche
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar

                        Lädt...
                        X