[php/mysql] Einträge die in zwei spalten übereinstimmen raussuchen

Goltergaul

Well-known member
ID: 17553
L
26 April 2006
480
7
Hi ich hab ein Logikproblem und dachte mir ihr könnt mir bestimmt weiterhelfen ;)
Folgendes Szenario:
tabelle
x | y
12 | 24
53 | 25
75 | 50
12 | 24

Jetzt muss ich mit ner Schleife alle Koordinaten durch gehen die gleich sind (also einträge bei denen x un y jeweils identisch sind)

Das könnte ich jetzt so machen:
$x_koord=1;
$y_koord=1;
for ($i=0; $i<4300; $i++) {
if($x_koord > 80) { $x_koord=1; $y_koord++; }
mit Mysql checken ob auf die aktuelle Koordinate mehr als ein Eintrag zutrifft und dann was machen
$x_koord++;
}

Aber das haut ganz schön auf die Performance. Gibt allein mind. 4300 Query's obwohl vll nur 10 identisch sind. Gibts da ne bessere Lösung?

Danke euch =)
 
ohne eine Angabe der Query und welche Rolle das $i dabei spielt lässt sich schwer was daran optimieren.
 
naja also ich hab ein Koordsystem mit der Breite 80 und höhe 54

Das gibt dann insgesamt 4320 Felder (habe oben im code 4300 geschrieben, stimmt nicht)
Also gehe ich alle durch und checke mit einem Query
z.b. SELECT id FROM table WHERE x=$x_koord AND y=$y_koord
ob es da eine oder mehrere Einträge für die aktuelle Koord gibt.

Dies gibt aber wie gesagt mind. 4320 Querys, die meisten davon sind umsonst und verschwenden performance. Die Frage ist nun wie ich das ganze (vll auch ganz anders) einfacher machen kann ;)
 
Wenn's Dir reicht, die Koordinaten rauszufinden, an denen mehrere Einträge sind, versuch das hier mal:
Code:
SELECT x, y
FROM table
GROUP BY CONCAT( x, '|', y )
HAVING COUNT( * ) >1
 
tleilax schrieb:
Wenn's Dir reicht, die Koordinaten rauszufinden, an denen mehrere Einträge sind, versuch das hier mal:
Code:
SELECT x, y
FROM table
GROUP BY CONCAT( x, '|', y )
HAVING COUNT( * ) >1

mom mit x | y meinte ich dass es zwei spalten sind, kein string. Kenne mich mit CONCAT nicht aus... Ähm lasse ich das '|' einfach weg oder brauch ich jetzt ne andere Funktion? Also die zwei koords würden mir schon reichen :)
 
Nene, das kannst Du schon ganz genauso übernehmen. CONCAT() verknüpft Spalten und/oder absolute Werte miteinander. In diesem Fall ist das notwendig, um vernünftig gruppieren zu können. Würdest Du nur nach x+y gruppieren, würden auch diese Koordinaten als gleich angesehen werden - (2/12) und (21/2), da keine Trennung mehr zwischen x und y vorhanden ist.
 
achso okay dann probier ich das mal so, danke dir =)
btw. wo kann ich denn mehr über solche Spezialfunktionen lernen?
 
jop die kenn ich. Für meinen Geschmack leider zu sehr komprimiert, so dass ich da leider nicht alles verstehe. Bei google find ich aber leider immer nur erklärungen zu den einfachen Querys, vll noch ein paar JOIN's aber mehr dann auch nicht :/ Wenn da noch wer etwas auf lager hätte, dann nur her damit!

Dein Query scheint übrigens passend zu sein, danke =)
EDIT: Kleiner Zusatz vll noch. Wie kann ich dem Query noch beibringen, dass er nur doppelt vorhandene Einträge herraussucht die noch dazu in der spalte "team" verschiedene Werte haben?
 
Da fällt mir grad keine einfache Lösung ein. Musst Du entweder mit Subselects oder 'nem "Self-Join" machen (also die Tabelle auf sich selber joinen).