[mysql]Besondere abfrage möglich?

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
NEUE Frage in Posting 4

Also ich habe ine tabelle wo es zwei spalten gibt

Spalte a und spalte b

in beiden sind zahlen vorhanden.

Beispiel

3,6
3,7
1,3
2,3
2,8
1,6
...

Ich möchte nun gern die haben wo die 3 vorkommt, aber eigentlich will den "partner"

also bei wenn ich nach 3 suche sollte die ausgabe
6
7
1
2
sein.

ist das irgendwie möglich? Also wüßte gerade keine möglichkeit. Mir würde jetzt nur einfallen das mit zwei Abfragen zu machen, einmal wo ich a ausgebe und nach b=3 suche und einmal b ausgeben und a=3.

Müßte dann aber ein Array erstellen, weil ich das auch gern sortiert hätte...

Oder fällt jemanden eineandere möglichkeit ein?

Hoffe es ist halbwegs verständlich.

(Noch ne idee wäre ein view gewesen, scheint aber erst ab mysql 5 zu gehen?)
 
Zuletzt bearbeitet:
SELECT spalte1 as a FROM tabelle WHERE spalte2=3
UNION
SELECT spalte2 as a FROM tabelle WHERE spalte1=3
ORDER BY a

müsste eigentlich das machen was du suchst.
 
Super, perfekt, thx

muß ich mir merken, hatte ich bisher nciht genutzt das union
 
So das hat ja sehr gut geklappt.

Nun eine andere Frage.

Wie bekomme ich die Anzahl der jeweiligen zahlen, und die dazugehörige zahl?

Also

3,6
3,7
1,3
2,3
2,8
1,6

3 4mal
6 2mal
1 2mal
2 2mal
7 1mal
und 8 1 mal

Also im grunde würde 3 4mal mir langen.

ist das mit einer abfrage auch möglich?
 
Darf man am Rande fragen wofür die Struktur bestimmt ist? Vielleicht ist sie so ja ungünstig, wenn man derartige Queries konstruieren muss.

Ansonsten zum Thema: keine Ahnung ob, aber eventuell kannst du per a gruppieren und mit COUNT(*) die Einträge auslesen. (Ich hoffe das geht/ging so...)
 
Geht um ne Freundesliste,

aktuell wird immer die entsprechenden IDs der User gespeichert.

Wobei immer die kleinere als erstes ist.

ich hätte natürlich auch 1,2 2,1 eintragen können, aber dann hätte ich ja die doppelte menge.

Jetzt wollte ich halt den User mit den meisten Freunden.

Hmm vielleicht wäre es doch sinnvoller 1,2 2,1 einzutragen statt nur 1,2.

sollte ich mir nochmal durchn kopf gehen lassen, war recht spontan geplant...
 
SELECT nr, count(nr) as anz
FROM (
_______SELECT a as nr FROM tab
_______UNION ALL
_______SELECT b as nr FROM tab
)
GROUP BY nr

ich weiß aber nicht ob mysql unteranfragen mächtig ist :think:

notfalls könnte man auch

SELECT a as nr FROM tab
UNION ALL
SELECT b as nr FROM tab

verwenden und trivial mit php auszählen...
a la

arr = array();
while(sql-ergebnis auslese) {
if (isset(arr[nr])) arr[nr]++;
else arr[nr]=1;
}
 
Subselects sind möglich, aber leider nciht in der Version die ich nutze.

Dann notier ich mir denke ich lieber die Anzahl extra, und erhöh die bei einem neuen und erniedrige sie beim löschen, das sollte dann weniger ressourcen verbreuchen.