redbullmachtfit
Goto Top

MySQL Anzahl Strings mit selbem Beginn

Wieviele Artikelnummern die mit derselben Zahl / Buchstabe anfangen sind in der Tabelle vorhanden

Hallo,
ich habe eine Artikelinfo (VB.NET 2010) aufgebaut, in welcher Anwender einfach die jeweilige
Artikelnummer eingeben können und der jeweilige Lagerbestand und Preise etc. ausgegeben werden.
Dahinter steht eine MySQL 5 Datenbank.
Die Artikelnummern beginnen mit "2.xxxxxx" oder z.B. "JU xxxxxx"

Gibt nun ein Anwender "JU 12" ein, sollen alle Artikel, die mit "JU 12xxxx" beginnen in ein Datagrid geschrieben werden,
wenn die Anzahl der Ergebnisse > 1 beträgt.
Die Abfrage lautet:
SELECT a.art_nr, count(*) FROM artikel a WHERE a.art_nr LIKE 'JU 12%' GROUP BY a.art_nr  
Hier bleibt Count bei 1, da ja jede Artikelnummer nur einmal existiert.

Was mache ich verkehrt bzw. wie lautet die Abfrage richtig?

Danke im Voraus!

Content-ID: 159500

Url: https://administrator.de/forum/mysql-anzahl-strings-mit-selbem-beginn-159500.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

EvilMoe
EvilMoe 26.01.2011 um 17:43:34 Uhr
Goto Top
Das GROUP BY kannst du dir doch sparen, jede Nr ist nur einmal vorhanden also brauch doch nichts grupiert werden oder sehe ich das falsch?
Was ist denn nun das Problem, das Count 1 anzeiget aber mehr als eine Artikel Nr. mit JU 12 anfängt?
RedBullmachtfit
RedBullmachtfit 26.01.2011 um 18:02:25 Uhr
Goto Top
Ja, ich dachte ich könnte nach dem Anfang des String Gruppieren. Also in dem Fall "JU 12".
Ich möchte einfach
1. die Anzahl der Artikel herausfinden, deren Artikelnummer mit dem String also wieder "JU 12" beginnen.
Also JU 12001, JU 12002 JU 12003 = 3 Artikel
2. diese drei Artikel in einem Datagrid darstellen, damit der Anwender per Klick auf einen Artikel die jeweiligen
Daten wie Lagerbestand und Preise sieht.
EvilMoe
EvilMoe 26.01.2011 um 18:19:04 Uhr
Goto Top
Wenn du das mit GROUP BY machst erhälst du immer "1", das ist auch korrekt. Denn für jede Artikelnummer hast du auch nur einen Treffer.
Wenn du allerdings die ganze Anzahl haben möchtest wieviele Artikelnummern mit "JU 12" anfangen musst du das GROUP BY weg lassen.
48507
48507 26.01.2011 um 18:33:16 Uhr
Goto Top
SELECT a.art_nr FROM artikel a WHERE a.art_nr LIKE 'JU 12%'  

Die Anzahl der Datensätze wertest du dann in VB.NET 2010 aus.
RedBullmachtfit
RedBullmachtfit 27.01.2011 um 08:52:17 Uhr
Goto Top
Okay, danke euch beiden schonmal. Die richtigen Artikel bekomme ich ja bereits.
Aber wie finde ich denn mi dem MySQL Connector die Anzahl der Ergebnisse heraus?
Ich will die Daten aus Performancegründen nicht grundsätzlich in das Datagrid laufen lassen, sondern nur wenn
mehrere Artikelnummern existieren die mit "JU 12xxxx" beginnen, damit der Benutzer den gewünschten per Mausklick auswählen kann.

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSearch.Click
        Dim conn As New MySqlConnection
        Dim myCommand As New MySqlCommand
        Dim myAdapter As New MySqlDataAdapter
        Dim mydatareader As MySqlDataReader
        Dim myString As String = ""  

        Dim SQL As String

        SQL = "SELECT * FROM artikel a, lagerbestand l, preisstaffel p, preiseinheit pr, me_tab m WHERE a.art_nr LIKE '" & txtArtikel.Text & _  
            "%' AND a.art_lfdnr = l.lbs_artlfdnr AND a.art_preisnr = p.mes_nr AND a.art_preiskz = pr.pr_nr AND a.art_mekz1 = m.me_nr"  

        conn.ConnectionString = myConnString
        Try
            conn.Open()
            Try
                myCommand = conn.CreateCommand()
                myCommand.CommandType = CommandType.Text
                myCommand.CommandText = SQL
                mydatareader = myCommand.ExecuteReader(CommandBehavior.SingleRow)
                mydatareader.Read()

                If mydatareader.HasRows Then

                    myString = mydatareader("art_nr")  
                    If Not IsDBNull(myString) Then
                        lblActiveArt.Text = Convert.ToString(myString)
                    End If

                    myString = mydatareader("art_bez_001")  
                    If Not IsDBNull(myString) Then
                        txtBez001.Text = Convert.ToString(myString)
                    Else
                        txtBez001.Text = String.Empty
                    End If
...

                End If
            Catch myerror As MySqlException
                MsgBox("Fehler beim Lesen der Datenbank: " & myerror.Message)  
            End Try
        Catch myerror As MySqlException
            MessageBox.Show("Fehler beim Verbindungsaufbau: " & myerror.Message)  
        Finally
            If conn.State <> ConnectionState.Closed Then conn.Close()
        End Try
    End Sub
48507
48507 27.01.2011 um 13:00:04 Uhr
Goto Top
Dann mach zuerst einen Count(*) und wenn er positiv ist, dann die eigentliche Abfrage. Außerdem kannst du Abfragen limitieren, mit einem "LIMIT 20" am Ende (20 Datensätze). VB.Net kenne ich leider nicht.
RedBullmachtfit
RedBullmachtfit 27.01.2011 um 14:09:10 Uhr
Goto Top
Gute Idee mit dem Count ;)
Aber wie oben beschrieben bleibt ja Count bei 1, da jede Artikelnummer ja nur einmal existiert.
Ich muss wissen wieviele Datensätze mit dem BEGINN des Strings existieren.
48507
48507 27.01.2011 um 14:35:42 Uhr
Goto Top
Mensch, ist doch kein Problem, hier ist dein Count:

SELECT count(*) FROM artikel a WHERE a.art_nr LIKE 'JU 12%'  
RedBullmachtfit
RedBullmachtfit 27.01.2011 um 14:45:37 Uhr
Goto Top
Aaaaah, so hast du das gemeint!
Perfekt, ich danke dir!