OVH Community, your new community space.

Problem mit MySql-Abfrage


markusb
05.07.09, 12:23
Das wirst du ohne Join aber wohl kaum bekommen, denn um die Doubletten an zu zeigen, musst du immer Gruppieren, und bei der Gruppierung gehen (wenn man es so ausdrücken will) Informationen verloren.

Ich hab auch kein PhpMyAdmin um nach zu vollziehen, wie man damit arbeiten kann.
Der befehl von mir Sortiert übrigens nach Link.
Durch den Join sollten auch jeweils alle Datensätze angezeigt werden. Ggf bietet hier PhpMyAdmin nicht die erforderten Funktionen, oder MySQL reagiert auf die Abfrage anders als MS-SQL (welches ich kurz benutzt habe, um den Befehl zu prüfen).

So meine Ausgabe (vgl. Mein select oben, ein kompletter select unten):
http://imagesharing.com/storage/09070542704691.jpg

Hast du keine ID spalte? sonst könntest du einfach nach URL Sortieren (das sollte ja bewirken, dass die multiplen Einträge beisammen gelistet werden), die IDs aufschreiben die raus sollen und dann einfach ein DELETE FROM Presse WHERE Id IN(id1,id2,id3) drüber jagen.

deiszner
05.07.09, 10:01
Das Problem hierbei ist, dass ich folgende Ausgabe bekomme:

http://imagesharing.com/storage/090705207073764.jpg


Am Anfang zeigt er mir an, wieviele Doubletten er für den jeweiligen Datensatz bezogen auf 'link' er gefunden hat.

Aber ich kann ja jetzt nicht schauen - welchen dieser beiden Datensätze lösche ich - das ist mein Problem.

Daher hätte ich das ganze gern untereinander - einzeln - mit der üblichen phpmyadmin-Möglichkeit zum bearbeiten.

markusb
05.07.09, 09:25
Code:
SELECT COUNT(p.Link) as cnt, x.Title, x.Description, x.Anriss, x.Content, p.Link
FROM Presse p
LEFT OUTER JOIN Presse x on p.Link = x.Link
GROUP BY p.Link, x.Title, x.Description, x.Anriss, x.Content
HAVING COUNT(p.Link) > 1
ORDER BY p.Link
Das geht auch sicher kürzer und eleganter, aber das wäre zumindest schon einmal ein Ansatz.

Kleiner Tipp: Deutsch und englisch zu mischen ist nicht schön, in einer Tabelle die Presse heißt, erwarte ich Titel und nicht Title, vor allem nicht wenn Anriss darin steht

deiszner
04.07.09, 22:26
Hallo,

ich hab ein Problem mit einer MySql-Abfrage:

Ich habe in einer Tabelle mehrere tausend Pressemeldungen gespeichert - die wurden über Monate über eine RSS-Catch-Software (php-Skript) aus RSS-Feeds gelesen.

Dummerweise sind durch falsch bestückte RSS-Feed Dubletten in die Datenbank gekommen - manchmal fehlen einzelne Felder in den Datensätzen.

Aber eins ist immer gleich - pro eindeutiger Datensatz (Pressemeldung) gibt es einen Link (zur jeweiligen Seite mit dem Originalartikel), d.h. dies ist das Sortierkriterium.

Ich will also in der MySql Abfrage alle Datensätze haben, wo der Inhalt der Zelle 'link' mehr als einmal vorhanden ist.

Code:
SELECT count( * ) AS counter, title, description, anriss, content, link
FROM  presse
GROUP BY link
HAVING counter >1
Der Haken ist jetzt nur, dass er nur im phpmyadmin (ich gebe hier die SQL-Abfragen direkt ein) anzeigt "link xyz" ist 2 mal vorhanden - oder 3 mal - ich vermute mal das kommt vom dem "GROUP BY" - aber ich will ja nicht gruppieren sondern alle mehrfach vorhandenen Datensätze (Kriterium 'link') anzeigen, so dass ich diese manuell prüfen und ggf. löschen kann.

Wie muss ich die MySql-Abfrage ändern?

gruß

Sebastian