2016-08-07 13 views
1

Ich habe 1 Tabelle. Ich möchte ein kleines Lotteriespiel erstellen.Wie Array_rand und ein Array?

t1 haben, wie unten Daten.

+---------+------------------+-------------------+ 
| ID  | typeid   | createtime  | 
+---------+------------------+-------------------+ 
| 1  | 1    | 123456   | 
| 2  | 2    | 123123   | 
| 3  | 1    | 12312312312  | 
| 4  | 1    | 13123123   | 
| 5  | 1    | 123dddddaasd123 | 
+------------------------------------------------+ 

Ich möchte den Gewinner wählen, wenn die typeid = 1.

Meine Abfrage wie folgt (eigentlich query oder fetch_all von fetch_first verwenden?)

$qsid = DB::fetch_all("SELECT * FROM ".DB::table('t1')." WHERE typeid = 1"); 

und ich würde

array_rand nutzen möchten Gewinner zu wählen, so wie array_rand(1,3,4,5);

dann sollte Ich kann das Endergebnis verwenden, um den Gewinner zu setzen. Oder irgendeinen Vorschlag für einen anderen besseren Weg?

Vielen Dank.

Antwort

2

Wir können es auf verschiedene Art und Weise tun, machen wir es wie unten tun.

1. Weg: let's do it on mysql level

select ID from t1 where typeid =1 order by RAND() limit 1; 

obige Abfrage gelegentliche Reihe von mysql auswählen, in dem typeid ist 1.

2. Art und Weise: let's do it on coding level

wir select ID from t1 where typeid =1 brauchen, und halten Sie es in jedem Array und wählt dann zufälliges Element aus dem Array

int array[]={1,3,4,5} 
int finalResultId = array[java.util.new Random().nextInt(array.length)] 

Ich hoffe, es wird Ihnen helfen. Dank

+0

ich die 'Reihenfolge von RAND denken() limit 1;' für mich schon genug ist, danke! –

2

Try This New One

SELECT `ID` 
FROM `t1` 
WHERE `ID` IN (
       SELECT `ID` 
       FROM `t1` 
       WHERE `typeid` = 1) 
ORDER BY RAND() 
LIMIT 1 
+0

Danke. aber meine 'DB ::' Funktion war nicht erlaubt für 'SELECT' in einem' SELECT' für Abfrage Sicherheitsproblem, sowieso, die 'ORDER BY RAND()' ist was ich brauche, danke! –

+0

versuchen, diese wählen $ = $ db-> select() -> aus (array ('t' => 't1'), array ('ID')) -> where ("WHERE' ID' IN (SELECT ' ID' FROM '' WHERE t1' typeid' = 1) ") -> Ordnung ('ORDER BY RAND()') -> Grenze ('LIMIT 1'); –

+0

eigentlich können wir es mehrere Möglichkeiten tun, aber wir müssen über 'performance' innere Abfrage im Auge behalten ist weniger optmised vielmehr, dass einzelne Abfrage – sanjeevjha

Verwandte Themen