MySQL-Abfrage (Inner oder Outer JOJN?)

bn

Erfahrenes Mitglied
Hallo allerseits,

folgende Problematik:
es gibt eine tabelle namens x mit folgenden Spalten:
----------------
id AUTO INCREMENT, visits, out, Primary Key (id)
----------------

In dieser Tabelle sind nun viele viele Einträge mit unterschiedlich hohen Zahlenwerten in visits und out.
Diese Tabelle ist Grundlage für ein Rankingsystem.
1. Primärität: visits
2. Primärität: outs
Sprich die Reihenfolge des Rankings richtet sich zunächst den Visits und erst wenn 2 Datensätze die gleiche Anzahl an Visits haben, kommen die Outs für das Ranking auf.

Ich möchte nun in ein Suchfeld einen Rang eingeben und am Ende brauche ich die id.
Theoretisch müßte man das mit COUNT und einem Join der selben Tabelle machen, nur habe ich es bisher nicht hinbekommen.
hier mal mein FALSCHER Lösungsansatz:
PHP:
$daten = mysql_query("
			SELECT first.id FROM x AS first WHERE 
			(SELECT COUNT(*) FROM x AS second WHERE 
			(first.vote < second.vote OR ( first.vote = second.vote AND first.out < second.out))='".$_POST['rank']."')
			",$db);
$_POST['rank'] ist dabei der durch ein Formular übergebene Suchrang.

Ich weiß, das diese Abfrage alles andere als einfach ist und bin deshalb für jede Anregung dankbar.

cya bloddy
 
also da es nur eine tabelle ist brauchst du kein join :)

wenn du eine var $rang hat in der rang als int vorhanden
ist geht die abfrage so:

select id from x order by visits,outs limit '$rang',1
 
danke für deine antwort, nur ist es nicht ganz so einfach.
angenommen 2 oder mehrere datensätze haben die gleiche anzahl an visits und outs (sagen wir datensätze 130, 459, 678).
dann würde nur einer der drei gleichplazierten ausgegeben werden. ich benötige in diesem fall aber alle drei.

ich denke ohne join gehts net.
hier steckt wahrscheinlich nur ein winziger fehler drin
(ich weiß nur nicht wo):
PHP:
$daten2 = mysql_query("SELECT first.id, COUNT(*) AS zaehle FROM $tabelle AS first LEFT OUTER JOIN $tabelle AS second ON 
			(first.vote < second.vote OR ( first.vote = second.vote AND first.out < second.out)) WHERE zaehle='".$_POST['rank']."'-1",$db);


thx for help :D
 

Neue Beiträge

Zurück