Prüfen wieviele Einträge in DB zur gleichen ID



  • Hallo

    weiß jemand wie man sowas macht:

    Und zwar stehen in meiner DB folgende Spalten

    VersuchId und Zeit
    1 5
    1 10

    mit sowas bekomm ich immer den ersten Eintrag(
    if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind!
    {
    sZeit = pRs2->m_szZeit;
    }

    Wie kann ich dann prüfen ob es noch mehrer Eintrage zur gleiche Id gibt?

    Wisst ihr wie ich das meine?



  • Frag doch einfach mit dem SQL-Statement immer den ersten Datensatz ab...

    ansonsten sähe der Pseudo-Code ungefähr so aus

    - Gehe zum ersten Datensatz
    - Speichere Wert in Variable
    - Vergleiche ab dem 2ten Datensatz den Wert mit dem gespeicherten wenn er gleich ist überspringe ihn
    - Wenn er unterschiedlich ist Speichere den Wert in die Variable

    dies Setzt voraus das die Werte ASC/DESC geordnet sind!

    Mfg

    Disi



  • hi disi
    erstmal danke für die Hilfe

    Frag doch einfach mit dem SQL-Statement immer den ersten Datensatz ab

    yup mach ich ja schon 🙂

    - Vergleiche ab dem 2ten Datensatz den Wert mit dem gespeicherten wenn er gleich ist überspringe ihn

    ne, der wert kann auch gleich sein (also die Zeit)

    Also ich erklärs nochmal bisschen genauer
    Ich habe 2 Tabellen: eine Versuchsdaten Tabelle mit folgeden Spalten VersuchId(AutoNumber) und Versuchsname(TEXT) und eine Flaechen Tabelle mit VersuchId(NUMBER) und Zeit(NUMBER)

    Wenn ich einen Versuchsnamen anlege, bekommt die ja automatisch eine Id mit (VersuchId) und in der Flaechen Tabelle steht die gleiche VersuchId und dann in der Zeitspalte z.B 10 . Der Wert wird dann in die sZeit Variable gespeichert

    also so

    if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind!
    {   	    
    	sZeit           = pRs2->m_szZeit;
    }
    

    nun kannes aber vorkommen ,dass zur gleichen Id mehrere Einträge geben kann

    also

    VersichId Zeit
    1 5
    1 10

    alles klar 🙂



  • Hi,

    ich weiss ja nicht, was Du machst, wenn Du mehrere Einträge findest. Um alle Einträge zu finden, würde ich es etwas anders anfangen, als Du es gemacht hast:

    pSt.Open(CRecordset::snapshot,sql_string);
    	if (!pSt.IsBOF() && !pSt.IsEOF())
    	{
    		pSt.MoveFirst();
    		do
    		{
    // Mach irgendwas mit dem Record.....
    			pSt.MoveNext();
    		}
    		while (!pSt.IsEOF());
    		pSt.Close();
             }
    

    Ich hoffe, ich habe Deine Tabellennnamen nicht durcheinandergebracht - ich habe aus nem Programm von mir kopiert und editiert...

    Gruss

    yeti



  • hi

    habs jetzt mal so gemacht, aber was müsste ich den in das if(..) reinschreiben?

    if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind!
    	{   
    
    			if(???was muss da hin???)
    			{
    				sZeit           = pRs2->m_szZeit;
    				break;
    			}
    		}while(!pSt.MoveNext());
    	}
    

    danke dir
    (deins werd ich jetzt mal probieren)



  • ach ich hab das do noch vergessen



  • Hi,

    die Frage ist: Wenn Du mehrere Einträge mit der gleichen (oder derselben 😕 ) ID findest, was willst Du dann machen? Den ersten, den letzten oder irgendeinen verwenden?

    Gruss

    yeti



  • okay, also wenn das klappen würde dann bekomm ich ja die Zeiten und die möchte ich dann später in eine WordVorlage durch ZEITZEIT ersetzen

    In der Wordvorlage steht dann drinne
    z.B
    5 min
    10 min
    15 min

    aber am Anfang steht nur ZEITZEIT, da ich nicht weiß weviele Einträge in der DB vorhanden sind ,

    verstehst du mich 🙂



  • Das klappt schon, wenn Du an der Stelle, an der mein Kommentar steht ("Mach was mit dem Record") die Zeiten irgendwohin stellst oder weiterverarbeitest (Um das genauer sagen zu können, müsste ich den Rest der Routine sehen).

    Muss jetzt leider weg, es ist Freitag nachmittag. Vielleicht kann ich mich morgen nochmal einklinken.

    Viel Erfolg + schönes WE

    Gruss

    yeti



  • okay, vielen dank
    dir auch schönes WE



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du musst dich mit SQL beschäftigen. Wenn du die Anzahl wissen willst dann

    SELECT count(id) FROM wasauchimmer GROUP BY id

    Alle Datensätze geordner nach id

    SELECT id FROM wasauchimmer ORDER BY id ASC
    oder
    SELECT id FROM wasauchimmer ORDER BY id DESC

    oder nur die mit einer bestimmten id

    SELECT id FROM wasauchimmer where id = 1



  • hi

    mmh, aber eigentlich ist doch egal wieviele Einträge ich hab , dass muss ich doch nicht wissen oder?
    D.h das wird doch in der der schleife geprüft
    d.h ich brauch dann die Werte (zeit)

    ich muss doch dann die Anzahl gar nicht wissen oder

    kein Plan 😕

    danke



  • so passt dann

    Lösung:

    CStringArray sZeitArray;
    	if(!pSt.MoveFirst())	
    	{  
    		do
    		{
    			CString sTmp = pRs2->m_szVersuchId;  
    			CString sZeit = pRs2->m_szZeit;
    		}while(!pSt.MoveNext());
    	}
    

    danke



  • wenn du wissen willst wie oft eine id in der tabelle vorkommt
    kannst du das mit
    select id,count(*) from tabelle group by id

    das gibt dir 2 spalten zurueck. die erste enthaelt die id und
    die 2. die anzahl wie oft sie in der tabelle enthalten ist.



  • hi

    ich habs jetzt so gemahct wie oben geschrieben und es klappt
    trotzdem danke 😉


Anmelden zum Antworten