Daten neu zuordnen

AFFranky

Grünschnabel
Servus!

also ich bastel zZ an einem kleinem Spielchen und bin heute an eine Stelle gekommen, an der ich aus der Datenbank Felder auslesen möchte die verschiedene Bedingungen erfüllen!
Von denen soll dann per Zufall ein Eintrag ausgewählt werden.

So hatte ich das bisher überlegt: (vielleicht geht das ja noch ein bissl simpler)
PHP:
// Inselkette erechnen
$limit = 30;
$inselketten_query=mysql_query("SELECT * FROM pc_inselketten WHERE meer_id='$meer' AND anz_inseln_max!='$limit'",$connect);  
// btw. is der !=  Operator richtig, also geht dat!?!?
	$anz_inselketten = mysql_numrows($inselketten_query);
	
	
$insel_min = 1;
$insel_max = $anz_inselketten;
$set_inselkette = mt_rand($insel_min, $insel_max);

Nun errechnet der mir ne schöne Zufallszahl! Allerdings bringt mir das ja REINGARNIX :D
ich will ja das dadurch eine Inselkette zufällig ausgewählt wird! Also muss ich den ausgelesenen Einträgen (Inselketten) zuvor eine Nummer geben! (die ID kann ich ja nicht nehmen, da ja nicht von 1-X gehen sondern, z.B. 5,7,19,24 usw. sind)

Irgendwie müsste ich die halt der reihenach von 1 bis X durchnummerieren, so dass man später einfach nur die Zufallszahl nehmen muss und schauen zu welchen Eintrag diese gehört, und diesen Eintrag wieder woanderst in die DB eintragen :D

ich hoffe ich habs einigermaßen gescheit erklärt! ;)
Es kann auch noch gut sein das im oberen PHP Code tippfehler drinne sind, wie gesagt, ich hab halt schnell getippt und finde nun keine passende und unkomplizierte Lösung...

greatz
Franky
 
hi,

ich würde es so lösen:

erstelle dir einfach deine Anzahl an Zufallszahlen (am besten mit rand([$min],[$max]) ) die du brauchst
und diese nimmst du dann für deine SQL - Abfrage.

Die sieht dann so aus.

PHP:
$inselketten_query=mysql_query("SELECT * FROM pc_inselketten WHERE 
inselkettenid IN ($zahl1, $zahl2, $zahl3, $zahl4,)",$connect);

mit IN kannst du also eine Menge von werten auslesen.

Alles klar ?

Gruß
Jens
 
Hi

Ich weiß nicht genau was ob das jetzt das richtige ist aber mit
PHP:
ORDER BY RAND() LIMIT 1

holt er zufällig etwas aus der tabelle raus was auch immer...
 
könnte ich das dann so machen:
PHP:
mysql_query("SELECT * FROM pc_inselketten WHERE meer_id='$meer' AND anz_inseln_max!='$limit' ORDER BY RAND()",$connect);

das wäre natürlich ne subba lösung, wenn das so funzt...

erstmal THX @ euch beide!

kann mir noch einer schnell sagen ob der "!=" Operator in der Form in diesem mysql_query -TAG stehen darf!?

da war ich mir nimmer sicher...

greatz
Franky
 
Moin,

also mit ORDER BY RAND() wird es glaube ich nicht funzen.
Soweit ich weiß liefert RAND() eine Zufallszahl zwischen 0,0 und 1,0
und das wäre glaube ich nicht das was du möchtest.

@MajinVegeta

'==' wird glaube ich nicht funzen

das hier geht:

= Gleichheit
<=> Gleichheit der NULL Vergleich zulässt
!= oder <> Ungleich
< Vergleich kleiner als
> Vergleich größer als
<= Vergleich kleiner gleich als
>= Vergleich größer gleich als
BETWEEN zwischen
IN mengenvergleich
NOT IN nicht diese Menge
IS NULL
 
hm...

@Texaner:
was könnte man dann anstatt des Order by RAND() machen?

Es muss halt irgendwie eine zufällige Ausgabe einer Zeile erfolgen die bestimmte Bedinungen erfüllt...

naja, ich werde mal weiter meine Bücher durchsuchen um was passendes zu finden... kann ja net sein, dass mich diese kleine Sache so ewig aufhält *hmpf*

greatz
Franky
 
Sonntag morgen wir deppen sitzten am hier rum.
Sorry könnte ich mir nicht verkneifen
;)

Also eigentlich müsste es mit dem IN sowie ich es beschrieben habe funzen. Allerdings habe ich es nich getestet.

Du kannst ja in der WHERE - Bedingung noch mehr einbauen.

Wenn das nicht klappt meld dich einfach nochmal


Gruß

Jens
 
tja, ich gammel halt sollange noch rum bis mich der Schrei:
"Essen ist ist feddich!" erreicht :D

zu deiner Lösung weiter oben, die habe ich ehrlich gesagt nicht 100%ig verstanden!

wäre nett wenn du mir das mal näher erklären könntest!

greatz
"der Sontagsgammler" Franky :D
 
also, ich versuchs mal

PHP:
for($i=0;$i<5;$i++)
	{
		$ZAHL[$i]=rand(1,100);
		echo $ZAHL[$i]."\n";
	}

Das erzeugt dir 5 Zufallszahlen zwischen 1 und 100.
mit echo lasse ich sie zur Kontrolle ausgeben.
Die 100 solltest du bei Dir durch die höchste ID deiner Tabelle
ersetzten.
Also vorher eine SQL Abfrage machen, die Dir die MAX(ID) deiner Tabelle holt.

PHP:
$sql="SELECT MAX(inselkettenid) AS MAXID FROM pc_inselketten";
$result=mysql_query($sql,$connect);
$row = mysql_fetch_array($result);
$maxid = $row["MAXID"];
mysql_free_result($result);

Deine for Schleife müsste jetzt so aussehen:

PHP:
for($i=0;$i<5;$i++)
       {
		$ZAHL[$i]=rand(1,$maxid);
	}

Jetzt einfach noch die SQL-Abfrage mit "IN" machen.

PHP:
$inselketten_query=mysql_query("SELECT * FROM pc_inselketten WHERE 
inselkettenid IN 
($ZAHL[1], $ZAHL[2], $ZAHL[3], $ZAHL[4], $ZAHL[5])",$connect);

in den "IN" klammern stehen nun 5 Zufallszahlen.
also hast du im Ergebniss 5 verschiedene Datenbankeinträge.

Alles klar ?


Gruß

Jens
 
Zurück