Antwort
 
Themen-Optionen
Alt 22.09.2005, 18:31 Nach oben    #1
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard Mehrfache DB-Einträge auslesen

Hallo,

folgendes Problem, welches ich z.Zt. nicht lösen kann. Ich möchte aus einer mySQL-Tabelle alles ausgeben was mehrfach vorhanden ist. Kleines Beispiel:

+---+---------+---------+
| ID +--Wert --+-Wert2 -+
+---+---------+---------+
| 1 +-- bla ---+-- bla --+
| 2 +-- bla ---+-- foo --+
| 3 +- blubb --+-- bar --+
| 4 +- quark --+-- abc --+
| 5 +- blubb --+-- def --+
| 6 +-- bla ---+-- ghi --+
+---+---------+---------+

Sieht doof aus, aber vielleicht versteht ihr ja den Aufbau *g*
Nun möchte ich genau die Zeilen selektieren, wessen Werte von "Wert" MEHRFACH vorhanden sind, also 1,2,3,5 und 6
Welche Lösung gibt es für dieses Problem? Muss ich das durch PHP "rausfiltern", oder kann ich das direkt durch einen Query machen? Das mySQL-Manual hat mir da jedenfalls nicht viel weitergeholfen, oder ich hab nicht gut genug gesucht...

lg,
Marc
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 18:36 Nach oben    #2
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

hmm ein Versuch auf die Schnelle:

SELECT ID,count(Wert) AS C1 FROM table GROUP BY ID HAVING C1 > 1
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 18:43 Nach oben    #3
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Hm, bekomme nur eine leere Seite als Ausgabe, trotz mysql_error und error_reporting(E_ALL). Also fehlerhaft ist der Query nicht, nur macht er noch nicht was er soll.
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 13:18 Nach oben    #4
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Also ich hab jetzt so viel ausprobiert, aber komme einfach nicht auf die Lösung. Der o.a. Query bringt leider kein Ergebnis, das SQL-Manual hilft mir auch nicht weiter...
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 13:33 Nach oben    #5
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Die Zeile GROUP_CONCAT(id) AS inIds ist nur optional

Code:
SELECT
      count(value) AS countedValues,
      GROUP_CONCAT(id) AS inIds

FROM magic

GROUP
     BY value

HAVING countedValues > 1
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 13:36 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich habe mal eine Frage zu robos SQL-Statement.
Vielleicht kommen wir ja durch rantasten näher zu der Lösung

Also, was sollte eigentlich COUNT(spalte) bewirken? Der Ansatz ist doch irgendwie falsch, oder sehe ich das jetzt nicht richtig?
Ich hab mir zuerst gedacht: Okay, das zälht die Anzahl der gleichen Sachen, okay .. Problem gelöst.
Aber auf den zweiten Blick .. wer sagt, dass da die "gleichen" Sachen gezählt werden?

Ich bin jetzt auch nicht so der SQL-Guru *g*, demnach ist alles, was ich hier von mir geben ohne Gewäht ..

Mich interessiert das auch mal ..
Grüße Ben.


EDIT:
Stop! Es lag nur daran, dass robo nach ID "gruppiert" hat und du nach "value"? ... *staun* .. hättsch ja gerade mal gar nicht gedacht ...


Btw:
Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

moved to Datenbanken: MySQL, SQL, ..


Geändert von Ben (23.09.2005 um 13:40 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 13:57 Nach oben    #7
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Ok, jetzt klappt es soweit das er mir sagt wieviele Einträge mehrfach vorhanden sind und gibt auch die ersten Einträge aus, die es mehrfach gibt, aber nicht alle.

Vielleicht habe ich auch einen Fehler im Ausgabecode:

PHP-Code:
<?
error_reporting(E_ALL);
include("config.php");

$query = mysql_query("SELECT id,wert,wert2,count(wert) AS countedValues
                      FROM test GROUP BY wert
                      HAVING countedValues > 1");

echo "Anzahl durch mysql_num_rows: ".mysql_num_rows($query)."<br>";

while ($out = mysql_fetch_array($query) OR die(mysql_error())) {
    echo "ID:$out[id] | $out[wert] | $out[wert2]<br>";
}
?>
Ausgabe:
Code:
Anzahl durch mysql_num_rows: 2
ID:1 | bla | bla
ID:3 | blubb | bar
Eigentlich sollten alle mehrfachen Einträge gelistet werden, also ID 1,2,3,5,6


Edit: Oh, ich wurde verschoben *peinlich*
Edit2: Wieso steht da include("config.html"); ?? Ich hab da config.php stehen

Geändert von Magic (23.09.2005 um 14:00 Uhr).
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:02 Nach oben    #8
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Zitat:
Zitat von Magic
Eigentlich sollten alle mehrfachen Einträge gelistet werden, also ID 1,2,3,5,6
Dafür benötigst du meine optionale Zeile.
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:12 Nach oben    #9
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Auch mit der optionalen Zeile bekomme ich das gleiche Ergebnis
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:19 Nach oben    #10
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Zitat:
Zitat von Magic
Auch mit der optionalen Zeile bekomme ich das gleiche Ergebnis
Das glaube ich nicht Tim ...
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:22 Nach oben    #11
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Doch Al, ist so

PHP-Code:
<?
error_reporting(E_ALL);
include("config.php");

$query = mysql_query("SELECT id,wert,wert2,count(wert) AS countedValues,
                      GROUP_CONCAT(id) AS inIds
                      FROM test GROUP BY wert
                      HAVING countedValues > 1");

echo "Anzahl durch mysql_num_rows: ".mysql_num_rows($query)."<br>";

while ($out = mysql_fetch_array($query) OR die(mysql_error())) {
    echo "ID:$out[id] | $out[wert] | $out[wert2]<br>";
}
?>
Ausgabe:
Zitat:
Anzahl durch mysql_num_rows: 2
ID:1 | bla | bla
ID:3 | blubb | bar
DB-Struktur siehe oben
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:27 Nach oben    #12
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Du bist und bleibst ein Dilletant Tim

PHP-Code:
<?php
while ($out mysql_fetch_array($query) OR die(mysql_error())) {
    echo 
"ID:$out[id] | $out[wert] | $out[wert2] | $out[inIds]<br>";
?>
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:31 Nach oben    #13
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Oha, so hab ich das noch nicht ausprobiert gehabt. Also das Prinzip funktioniert tadellos, nur die Ausgabe ist noch nicht nach meinem geschmack. Wollte eigentlich eine Ausgabe in diesem Format haben:
ID1 | Wert | Wert2
ID2 | Wert | Wert2
ID3 | Wert | Wert2
ID5 | Wert | Wert2
ID6 | Wert | Wert2

Aber das bekomm ich bestimmt auch irgendwie hin.
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:34 Nach oben    #14
Martin Schröder
 
Benutzerbild von Orolhawion
 
Registriert seit: 15.12.2004
Ort: Stockholm
Beiträge: 116
Standard

Zitat:
Zitat von Guradia
Zitat:
Zitat von Magic
Auch mit der optionalen Zeile bekomme ich das gleiche Ergebnis
Das glaube ich nicht Tim ...
Ich denke nicht, Tim!
__________________
"Wer nicht mit der Zeit geht, wird mit der Zeit gehen."
Game over, Junge!
ENERGIE!
___________________________
Mein Blog
Mein OpenBC
Orolhawion ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:34 Nach oben    #15
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Darf ich bemerken, dass es für mich extrem dümmlich wirkt, mehrfache Einträge finden zu wollen und sie dann auch noch mehrfach auszugeben? ... Da kannst ja gleich direkt in die DB schauen ...
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 14:44 Nach oben    #16
Neuer Benutzer
 
Benutzerbild von Magic
 
Registriert seit: 18.08.2005
Ort: Hannover
Beiträge: 10
Standard

Ja, ICH würde das auch eher anders machen, aber das Script soll ja nicht für mich sein. Aber ich hab durch die GROUP_CONCAT Funktion, die ich vorher noch nicht kannte, einen viel besseren Lösungsweg gefunden.
Ich behalte das Prinzip jetzt so bei wie es ist und baue das noch weiter aus, mal sehen was ich am Ende herausbekomm.

Eigentlich reicht es ja wenn es so aussieht:
ID1 und die IDs 2 und 6 sind identisch - Details
Nach einem Klick auf Details kann ich ja dann die mehrfachen Einträge einzeln anzeigen lassen. Das bewahrt auf jeden Fall auch die Übersicht.

Danke erstmal für deine Hilfe
Magic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] Doppelte Einträge thrawn Datenbanken 2 11.04.2007 17:13
Mehrere Zeilen auslesen. Jan Datenbanken 17 27.06.2006 16:49
mit PHP ein Bild auslesen Jann Hendrik PHP-Programmierung 8 09.05.2006 09:12
[PHP] Fremde Webseiten auslesen WarrenFaith Tutorials 3 14.03.2006 15:59
Datenbank auslesen und Daten in JTable überführen Lautsprecher Datenbanken 5 20.10.2005 15:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:54 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44