Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 01.06.2010 um 08:05:54 Uhr
Nach AluCard7s Kommentar vom 31.05.2010 ist das Thema "erledigt" (im Sinne von gegenstandslos) und, soweit ich es einschätzen kann) auch die Lösung der Frage gegeben worden.

Ich setze es daher aus "Gelöst" und, weil ich hier keinen Take-Over irgendwann haben möchte, auf "Geschlossen".

Frage Entwicklung PHP

GELÖST

Gefilterte Datenbankabfrage

Mitglied: Alucard7

Alucard7 (Level 1) - Jetzt verbinden

22.01.2010, aktualisiert 01.06.2010, 3685 Aufrufe, 11 Kommentare

Hallo an alle Mitglieder,

ich muss für meinen Betrieb eine Datenbank erstellen mit Weboberfläche, in der ganz normal Daten eingeben, bearbeitet und gelöscht werden.
Dafür gibt es vorbestimmte Abfragen an die Datenbank, von denen die jetzige konkret gefiltert werden muss hinsichtlich doppelten Datensätzen.
Dazu habe ich versucht mit distinct meine Daten zu filtern, jedoch will ich nicht, dass alle angegeben Werte für die Überprüfung herangezogen werden.
Konkret sieht die Beispiel-Abfrage so aus:
01.
$query = "SELECT DISTINCT `name`,`medium`,`datum`,`neu` FROM `$db` ORDER BY name;";	
Jetzt möchte, dass nur der name zur Überprüfung genommen wird und nicht die anderen 3, da das Datum hier eine Filterung unmöglicht macht.
Könnte mir jemand zeigen, wie ich die Abfrage verändern muss, damit ich das gewünschte Ergebnis erhalte?
Danke!

mfg Alucard7
Mitglied: 48507
23.01.2010 um 15:59 Uhr
DISTINCT bezieht sich auf den SELECT und nicht die Spalten. Versuche es mit einem GROUP BY.
Bitte warten ..
Mitglied: Biber
23.01.2010 um 20:02 Uhr
Moin Alucard7,

ich habe deine Frage auch seit gestern mehrfach nachhallen lassen.
Meine Befürchtung war und ist sogar, dass du eigentlich nach der WHERE-Klausel suchst:
01.
$query = "SELECT DISTINCT `name`,`medium`,`datum`,`neu` FROM `$db` WHERE Name ='whatever';";
Allerdings kollidiert diese Befürchtung mit deinem Satz
ich muss für meinen Betrieb eine Datenbank erstellen mit Weboberfläche...

Hoffe also, ich liege falsch.

Grüße
Biber
Bitte warten ..
Mitglied: Alucard7
23.01.2010 um 21:03 Uhr
Danke für die schnellen Antworten!

zu spytnik: werde ich demnächst ausprobieren, konnte mir aber bis jetzt noch nicht im klaren werden, was group by überhaupt genau macht.

zu biber: Du hoffst zurecht, da ich nicht nach bestimmten Namen suche, sondern alle doppelten Namen finden und alle dazugehörigen Einträge löschen will,
wenn möglichst in einer Abfrage.
Bitte warten ..
Mitglied: Biber
24.01.2010 um 18:10 Uhr
Moin Alucard7,

Zitat von Alucard7:
zu biber: Du hoffst zurecht,
Gottseidank.
da ich nicht nach bestimmten Namen suche, sondern alle doppelten Namen finden
und alle> dazugehörigen Einträge löschen will,
wenn möglichst in einer Abfrage.

Okay...
Aber dann brauchst du doch irgendeine Definition, was nun der Eintrag/Datensatz sein soll, der erhalten bleibt und welches die "doopelten" Datensätze sind, die weggebratzt werden.
Anders gefragt:
  • ist das Wichtige, dass jeder Name nur einmailg vorkommt und nebensächlich, was in den Feldern "Medium", "Datum", "neu" steht
  • oder ist der jüngste Datensatz (gemäß Inhalt von "Datum") der "einzig wahre" und alles andere wird recycled?
  • und natürlich auch...was zum Gates liegen da heute für Prinary-Key-Constraints drauf, wenn die Tabelle heute diesen Inhalt haben kann? Wodurch zeichnet sich heute ein "eindeutiger Datensatz" aus?

Grüße
Biber
Bitte warten ..
Mitglied: Alucard7
25.01.2010 um 01:27 Uhr
Jop, jeder name! soll nur einmalig vorkommen, der rest soll bei der doppelten suche ignoriert werden.
Zudem habr ich keinen Primary-Key der auto-inkrement ist, da die sortierung fortlaufend ist und ich lücken habe, wenn ich datensätze zwischendrin lösche.
Deshalb schreibe ich die id jedesmal neu für alle datensätze, funktioniert auch wunderbar.
mfg Alucard7
Bitte warten ..
Mitglied: Biber
25.01.2010 um 06:57 Uhr
Moin Alucard7,

sorry, montagmorgens bin ich immer etwas schwerer von Begriff.
Ich versuche noch mal, mein Verständnisproblem umzuformulieren.
Nach dem, was ich glaube verstanden zu haben, existieren in deiner Tabelle "Whatever" zum Beispiel die Sätze"
"Name" ,"Medium", "Datum", "neu"
"Heinz", "Buffy", "11.11.2007", "Ja"
"Heinz", "Steak", "12.12.2008", NULL
"Heinz","Sherry","31.12.2009" "Nein"
...

.. Also 3 Datensätze mit dem "gleichen" Namen Heinz... zwei sind also "doppelt" in deinem Sinn.
Welcher Satz soll erhalten bleiben, bzw. welche Werte in den Feldern "Medium", "Datum" und "neu" stehen in dem nicht zu löschenden Satz und wie ist dafür die Begründung/der Algorithmus?

Grüße
Biber
Bitte warten ..
Mitglied: Alucard7
25.01.2010 um 16:20 Uhr
Hi, bei mir sollte der erste Datensatz komplett erhalten bleiben und die übrigen komplett ignoriert werden, im endeffekt, dann gelöscht werden, das is aber kein problem.
Ich suche nur nach einer möglichst einfachen Abfrage an die Datenbank, die diese doppelten Einträge erkennt und nur den ersten oder so, hauptsache nur einen, ausgibt.
(ob da jetzt noch nach datum oder so gegangen wird, is zurzeit noch unrelevant, hauptsache es kommt erstmal überhaupt was richtiges raus, kann man später noch nachschauen.)
Mein Ansatz wäre halt:
$query = "SELECT DISTINCT `name`,`medium`,`datum`,`neu` FROM `$db` ORDER BY name;";
gewesen, jedoch werden wie oben erwähnt alle Spalten überprüft.
Rein logisch sollte es so aussehen:
$query = "SELECT DISTINCT `name`,NON-DISTINCT `medium`,`datum`,`neu` FROM `$db` ORDER BY name;";
geht halt leider nicht.
mfg Alucard7
Bitte warten ..
Mitglied: Biber
25.01.2010 um 17:05 Uhr
Ja nee, Alucard7,

dein Fern-Ziel is' schon klar mit dem EINmaligen Namen... siehe ganz ganz oben spytniks Antwort.

Die Namen einmalig bekommst ja sogar mit einem "SELECT DISTINCT NAME FROM tabelle" hin.

Frage ist doch, wenn zu diesem Namen "Heinz" nun partout noch Feldinhalte von medium/datum/neu angezeigt werden soll...welche sollen es dann sein?

Und ja, du hast es mehrfach bestätigt, es soll einfach "irgendwas" sein...
und das will mir nich' in die Birne... weder Montags noch in Monaten mit Vokalen im Namen...

Erwartetes Vorgehen wäre halt gewesen, wen du gesagt hättest "der älteste Datumswert von Heinz muss erhalten bleiben" oder "der Satz mit Status "neu" oder WTF.
Dann hätte esalles mit einem SubSelect gehen können auf ein spytniksches "Select name, min(datum) as erstDatum group by name" verJOINt mit der eigentlichen Tabelle.

Aber so kann ich doch nur empfehlen, mach ein
01.
 SELECT name,  FIRST(medium) as Medium, First(Datum) as Datum, FIRST(neu) as neu 
02.
GROUP BY Name 
03.
FROM tabelle;
Dann hast du alle Namen einfach... und in den anderen Feldern halt "etwas" drinstehen....

Grüße
Biber
Bitte warten ..
Mitglied: Alucard7
25.01.2010 um 18:52 Uhr
Danke für die schnelle Antwort!
Werde das demnächst ausprobieren und werd mich dann wieder melden.
mfg Alucard7
Bitte warten ..
Mitglied: Guenni
25.01.2010 um 21:57 Uhr
Hi Alucard7,

wieso greifst du nicht mal den Vorschlag von spytnik auf,

und versuchst es mal mit group by?

Ich habe hier eine Tabelle mit Adressdaten und habe mehreren

Leuten den gleich Vornamen verpasst.

Ein select . . . group by Vorname reduziert die Ergebnisse von x Datensätze auf y Datensätze.

Und da es dir (im Moment) egal ist, welcher Datensatz gelöscht wird . . . , (dein Zitat)

Hi, bei mir sollte der erste Datensatz komplett erhalten bleiben und die übrigen komplett ignoriert werden, im endeffekt, dann gelöscht werden, das is aber kein problem.
Ich suche nur nach einer möglichst einfachen Abfrage an die Datenbank, die diese doppelten Einträge erkennt und nur den ersten oder so, hauptsache nur einen, ausgibt.
(ob da jetzt noch nach datum oder so gegangen wird, is zurzeit noch unrelevant, hauptsache es kommt erstmal überhaupt was richtiges raus, kann man später noch nachschauen.)

. . . kannst du auf diese Weise doppelte Spalteneinträge löschen, in dem du eine Kopie der Tabelle erstellst:


01.
 
02.
create table Neue_Tabelle select * from Alte_Tabelle group by Spaltenname 
03.
 
Anschließend:

- Alte_Tabelle löschen

- Neue_Tabelle umbenennen in Alte_Tabelle


Gruß
Günni
Bitte warten ..
Mitglied: Alucard7
31.05.2010 um 13:52 Uhr
Hi, tut mir leid dass ich mich erst jetzt wieder melde, es gab einiges Umdenken bezüglich der Aufgabe.
Nachdem ich die von euch vorgeschlagene Lösung erfolgreich getestet hatte, sollte auf einmal alles mit auto inkr und so gelöst werde, da sich das doch als bessere Lösung heraus kristallisiert hatte :D. Naja jedenfalls habe ich dann damit zu tun, weshalb ich mich erst jetzt wieder melden konnte.
Dadurch brauchte ich mich halt auch nicht mehr mit group by zu behelfen
Trotzdem vielen Dank für die Hilfe ;)

mfg Alucard7
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Hilfe bei Datenbankabfrage
gelöst Frage von e51bomagDatenbanken11 Kommentare

Hallo liebe Community, hab gerade ein Blackout bzgl. Realisierung einer Abfrage. Folgende Datenbank: noten: nid, loginname, fid, note, type ...

Batch & Shell
Datenbankabfrage Powershell
gelöst Frage von internet2107Batch & Shell3 Kommentare

Ich versuche auf eine Datenbank zuzugreifen, was auch soweit klappt. Jedoch möchte ich gerne alle Tabellen listen, die sich ...

VB for Applications
Über VBA kopieren des gefilterten Bereiches
Frage von BlueLinesVB for Applications1 Kommentar

Hallo an Alle Könnte mir vielleicht jemand mit diesem Code weiterhelfen. 1. Problem: Er soll aus einer Mappe die ...

Microsoft Office
Excel Tabelle gefiltert auf neues Tabellenblatt
gelöst Frage von Florian86Microsoft Office3 Kommentare

Hallo, ich habe folgendes Problem und zwar möchte ich eine Excel Tabelle mit folgenden Aufbau Datum Lfd. Nr. Menge ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...