+ Auf Thema antworten
Zeige Ergebnis 1 bis 3 von 3

Thema: Adressbuch über das Terminal abfragen

  1. #1
     SFAB ist offline
    Neues MU Mitglied Benutzerbild von SFAB
    Registriert
    11.2004
    Beiträge
    21

    Question Adressbuch über das Terminal abfragen

    Ich möchte für die weitere Verarbeitung der Daten gerne bestimmte Einträge aus dem Adressbuch über das Terminal abfragen und als CSV-Datei abspeichern. Ich weiß, dass dies grundsätzlich mit dem Tool sqlite3 möglich ist.

    Leider bin ich kein Experte in Sachen Datenbanken. Kann mir jemand sagen, wie ich mittels sqlite3 die Adressen (Name mit Postanschrift) aller Mitglieder einer bestimmten Gruppe, für die keine E-Mail-Adresse eingetragen ist, abfrage?
    Geändert von SFAB (07-02-2010 um 11:54 Uhr)

  2. #2
     Goglo ist offline
    MU Mitglied
    Registriert
    10.2008
    Beiträge
    290
    Am besten installierst Du SQLite Manager, ein PlugIn für Firefox und probierst ein bisschen mit der Adressdatenbank aus "~/Library/Application Support/AddressBook/AddressBook-v22.abcddb" herum. (Vorher natürlich ein Backup ziehen!) Die jeweiligen Daten aus den Tabellen werden immer verknüpft, um z.B. die Adressdaten einem Kontakt aus ZABCDRECORD zuzuordnen. Eine Verknüpfung über die Felder "z_pk" und "z_ent" scheint sich anzubieten:

    Ein erster SELECT heißt dann:
    Code:
    SELECT zfirstname, zlastname, zstreet, zzipcode, zcity 
      FROM zabcdrecord AS rec 
        JOIN zabcdpostaladdress AS postal ON (
                         rec.z_pk = postal.zowner and
                         rec.z_ent = postal.z19_owner);
    
    Sicherlich stellst Du fest, daß nur die Kontakte mit gepflegter Adresse ausgegeben werden. Abhilfe schafft ein sog. "Outer Join": es wird jeder Kontakt ausgegeben, wenn vorhanden mit Adresse:
    Code:
    SELECT zfirstname, zlastname, zstreet, zzipcode, zcity 
      FROM zabcdrecord AS rec 
        LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                         rec.z_pk = postal.zowner and
                         rec.z_ent = postal.z19_owner);
    
    Nun basteln wir noch analog dazu die email-Adresse und fragen im WHERE-Teil nur nach denen ohne email-adresse:
    Code:
    SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
      FROM zabcdrecord AS rec 
        LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                         rec.z_pk = postal.zowner and
                         rec.z_ent = postal.z19_owner)
        LEFT OUTER JOIN zabcdemailaddress AS email ON (
                         rec.z_pk = email.zowner and
                         rec.z_ent = email.z19_owner) 
    WHERE zaddress is null;
    
    Den ganzen Kram kann man auch in ein shellscript packen:
    Code:
    echo ".mode csv 
    SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
      FROM zabcdrecord AS rec 
        LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                         rec.z_pk = postal.zowner and
                         rec.z_ent = postal.z19_owner)
        LEFT OUTER JOIN zabcdemailaddress AS email ON (
                         rec.z_pk = email.zowner and
                         rec.z_ent = email.z19_owner) 
    WHERE zaddress is null;" |
     sqlite3 ~/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb
    
    SQL ist halt eine komplette Sprache und SQLite3 bietet eine ziemlich vollständige Implementation davon. Du wirst ein bisschen lesen müssen; meine kleinen Beispiele helfen aber hoffentlich schon mal für den ersten Einstieg.

    Viel Spaß!

  3. Die folgenden 2 Benutzer sagten Danke zu dem nützlichen Beitrag von Goglo:


  4. #3
     SFAB ist offline
    Neues MU Mitglied Benutzerbild von SFAB
    Registriert
    11.2004
    Beiträge
    21
    Themenstarter
    Vielen Dank für deine ausführliche Antwort! Das ist genau die Starthilfe, auf die ich gehofft hatte!

+ Auf Thema antworten

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.