SQL Abfrage über zwei tabllen mit String Variable

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

  • SQL Abfrage über zwei tabllen mit String Variable

    Hallo und guten Morgen,

    ich muß eine SQL Abfrage aus php heraus machen über die Tabellen dist und bestellung . Das funktioniert mit nummerischen Variablen gut. Hingegen mit Stringvariablen nicht. Ich habe schon alle Varianten von Hochkommata versucht aber es will nicht gelingen.

    so geht es (in diesem Fall ist $dist_khk eine nummerische Variable):

    $res = mysql_db_query("projektsn", "select * from dist, bestellung where dist_text like '%$lieferant%' && dist.dist_khk = bestellung.dist_khk");

    Was mache ich falsch ????

  • #2
    Der SELECT String ist voll in Ordnung, brauchst keine anderen Hochkommatavarianten durchtesten. Vermutlich liegt es an den Daten oder am Datenbanklayout.

    Poste bitte mal den SELECT, der nicht funzt.

    Vorteilhaft für die Fehlersuche wäre noch das Layout der Tabellen, das Ergebnis von
    describe dist;
    describe bestellung;

    Kommentar


    • #3
      also hier die select Anfrage noch mal soweit vollständig:

      if ($lieferant)
      {
      $res = mysql_db_query("projektsn", "select * from dist, bestellung where dist_text like '%$lieferant%' && dist.dist_khk = bestellung.dist_khk");
      $num = mysql_num_rows($res);
      } else {

      Vielleicht habe ich mich zu umständlich ausgedrückt. Ich versuchs nochmal mit einfachen Worten:

      Die Abfrage hat immer funktioniert, als die Variable $dist_khk noch eine nummerische Variable war (int) $dist_khk = 100000. Jetzt werden aber statt Zahlen auch strings für die die Variable verwendet (VARCHAR) $dist_khk = A00001. Seit dem funktioniert die Abfrage nicht mehr!

      Hier die Tabelle dist:

      dist_id int(10) UNSIGNED Nein auto_increment
      dist_khk varchar(20) Nein 0
      dist_text varchar(250) Nein
      dist_tel varchar(20) Nein
      dist_fax varchar(20) Nein
      dist_eigkd varchar(100) Nein
      timestamp timestamp(14) Ja NULL

      und die Tabelle bestellung:

      bestellnummer int(20) UNSIGNED Nein auto_increment
      dist_khk varchar(200) Nein
      auftrag varchar(10) Nein
      kunde varchar(20) Nein
      bst_date date Nein 0000-00-00
      best_datum timestamp(14) Ja NULL
      status varchar(6) Nein offen

      Kommentar


      • #4
        dist.dist_khk varchar(20)
        bestellnummer.dist_khk varchar(200)

        Haben unterschiedliche Formate, ist das Absicht. Dürfte, wenn bestellnummer.dist_khk immer kleiner 21 Stellen hat ansich kein Problem sein, aber was, wenn in bestellnummer.dist_khk eine 21 stellige oder mehrstelligere Bestellnummer abgelegt wird, wie referenziert diese dann nach dist.dist_khk?

        Warum referenzierst Du nicht in der Tabelle Bestellnummer auf dist.dist_id diese dist_id ist zumindest unique (eindeutig).

        Überprüfe bitte die Inhalte der beiden Tabellen, ob es tatsächlich zu jeder Bestellung über die Felder dist_khk eine gültige Referenz gibt:

        $res = mysql_db_query("projektsn", "select * from dist, bestellung where dist.dist_khk = bestellung.dist_khk");

        Kommentar


        • #5
          Hallo Hand,

          vielen Dank erst mal für die schnelle Antwort!

          das mit den unterschiedlichen Formaten habe ich erst mal glattgebügelt wobei die Variable immer siebenstellig ist (K000030).

          dist.dist_khk varchar(20)
          bestellnummer.dist_khk varchar(20)

          [COLOR=orangered]Warum referenzierst Du nicht in der Tabelle Bestellnummer auf dist.dist_id diese dist_id ist zumindest unique (eindeutig). [/COLOR]

          Natürlich währe es besser gewesen von Anfang an die dist_id zu referenzieren. wenn kein weg daran vorbeiführt werde ich wohl auch in den sauren Apfel beissen und den Code entsprechend umschreiben (es sind sehr viele Änderungen die dann gemacht werden müssen) wobei die dist_khk auch eindeutig referenziert!

          Wie gesagt ich habe das Programm schon lange ohne Probleme laufen gehabt. Bis die Umstelleung der dist_khk von nummerisch auf String erfolgen musste. Bei einfachen Abfragen mußte ich nur die Variable in Hochkommata setzten und alles hat wieder funktioniert:

          Bsp. einfache Abfrage vorher (dist_khk ist eine Zahl)

          $sqlab = "select * from dist where dist_khk = [COLOR=crimson]$orikhk[/COLOR] ";

          Bsp. Abfrage nach der Änderung (dist_khk ist ein String)

          $sqlab = "select * from dist where dist_khk = [COLOR=crimson]'$orikhk'[/COLOR] ";

          Es sollte daher eigentlich auch funktionieren wenn man bai der Abfrage aus zwei Tabellen die Variable in Hochkommata setzt so in etwa?


          [COLOR=red]bestellung.'dist_khk'[/COLOR] ... oder
          [COLOR=red]'bestellung.dist_khk'[/COLOR]

          Bitte helft mir !!!

          Kommentar


          • #6
            Wer kann mir noch weiterhelfen?

            ...habt Ihr noch eine Idee ws ich da machen kann ?

            es ist wirklich dringend !

            freue mich über jede Antwort

            Kommentar


            • #7
              Es muß auch ohne Umstellung auf die ID funktionieren.

              $res = mysql_db_query("projektsn", "select * from dist, bestellung where dist.dist_khk = bestellung.dist_khk"); ist korrekt
              Übrigens kommt da ein vernünftiges Ergebnis raus?

              ... where char = 'hallo' ebenso korrekt

              = bestellung.'dist_khk' ist nicht korrekt
              = 'bestellung.dist_khk' ist nicht korrekt, er würde ja mit dem String verglichen und nicht mit dem Inhalt des Feldes bestellung.dist_khk

              Ich behaupte ganz frech der Fehler liegt woanders. Hast Du beide Tabellen in derselben Datenbank? Schau Dir die Feldinhalte mal ganz genau an. Ist irgendwo bei einer der beiden Tabellen ein klitzekleines Blank davor oder dahinter und bei der anderen nicht.
              Stehen vielleicht in einer Tabelle anstatt der Nullen 0 der Buchstabe O? In einer Tabelle klein, in der anderen groß geschrieben?
              Ist vielleicht irgendwo ein Whitespace, Zeilenumbruch, \n oder irgendwas mithineingebacken (gepackt)?

              Kommentar

              Lädt...
              X