• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Cum sa extrageti rapid un rand aleatoriu din baza de date?

3
  • Publicat de WorldIT Guest
  • în Fără categorie
  • — 4 feb., 2010 at 11:52 am


Multe siteuri au nevoie de lucrul acesta.De exemplu magazinele online, pentru a afisa produse aleatoriu din baza de date; sau o galerie de imagini pentru a afisa aleatoriu imagini.
Exista mai multe metode pentru a extrage un rand dintr-o baza de date. Am sa prezint mai jos doua din aceste metode.

Prima metoda

Cea mai simpla metoda este folosirea functie RAND() in interogarea bazei de date.

SELECT * FROM `tabel` ORDER BY RAND() LIMIT 1;

Folosind aceasta interogare MySQL creaza un tabel temporal cu toate randurile, acestea sunt ordonate aleatoriu, iar primul rand dupa aceasta sortare este returnat. Din aceasta cauza aceasta metoda are timpul de executie cel mai mare, iar pentru tabele cu foarte multe randuri, ma refer la zeci/sute de mii, poate creea probleme.

A doua metoda

Pentru ca aceasta metoda sa functioneze trebuie ca fiecare rand sa aiba un id(unic).

$numarul = mysql_query(" SELECT MAX(`id`) AS maxim, MIN(`id`) AS minim FROM `tabel` ");
$numarul = mysql_fetch_query($numarul);
$aleatoriu = mt_rand($numarul['minim'], $numarul['maxim']);
$rezultat = mysql_query(" SELECT * FROM `tabel` WHERE `id`>=$aleatoriu LIMIT 1 ");

In aceasta metoda folosim functiile MIN() si MAX(), pentru a afla minumul si maximul numarului de randuri din tabel. Stiind minimul si maximul, si cu ajutorul functiei mt_rand se alege un numar aleatoriu. Am ales functia mt_rand() in loc de rand(), deoarece prima este de patru ori mai rapida. In ultimul pas extragem randul din baza de date care are idul egal cu numarul aleatoriu sau mai mare in caz ca acesta id nu exista. Aceasta metoda are un timp de executie mai redus decat prima metoda.

A treia metoda

Aceasta metoda se bazeaza pe folosirea primului argument de la LIMIT x,y (din interogarea sql).Primul argument x, reprezinta punctul de plecare in afisarea randurilor, iar y numarul de randuri afisate. De ex: LIMIT 3,4 returneaza randurile 4,5,6,7.

$start1 = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `numar` FROM `tabel` ");
$start2 = mysql_fetch_array( $start1 );
$start = $start2['numar'];
$rezultat = mysql_query( " SELECT * FROM `tabel` LIMIT $start, 1 " );

Pentru a afla acest „punct de plecare”, se alege un numar de la 0 la 1(folosind functia RAND()) si inmultim acest numar cu numarul de randuri din acela tabel(folosind functia COUNT()). Iar pentru ca argumentul de la LIMIT nu poate sa fie decat un numar natural, folosim functia FLOOR().
Aceasta metoda este cea mai rapida, din punct de vedere al timpului de executie, si este metoda pe care o recomand.
Atentie daca vreti sa va returneze 5 randuri, iar „punctul de plecare” este 97 din 100 de randuri, aceast script va putea sa returneze decat 3, si nu 5; la fel este si in cazul metodei 2.

Articol scris de dage.Multumim!

Etichete: cum sa fac randomdespre elemente randomdespre numere randomextrage randommysqlPHPrandrandomrandomizeTehnictutorial

— WorldIT Guest a scris 19 articole

Contact | andrei@worldit.info | @worldIT Salut , ma numesc WorldIT Guest si sunt robotelul ce scrie articolele persoanelor ce doresc sa ajute dezvoltarea proiectului prin crearea articolelor guest. Mai multe detalii despre cum poti sa-mi trimiti un articol, aici.

  • Articolul anterior Pluginuri Mozilla Firefox utile pentru un web developer
  • Articolul următor digg.com a fost spart sau e doar o campanie desteapta?

3 Comentarii

  1. George Jipa spune:
    februarie 4, 2010 la 12:47 pm

    Primele 2 metode le stiam, insa a 3a nu mi-a trecut prin cap ! 🙂 Anyway.. bine de stiut 😉

  2. uberVU - social comments spune:
    februarie 5, 2010 la 11:42 am

    Social comments and analytics for this post…

    This post was mentioned on Twitter by gclaudiu: RT @worldIT: Cum sa extrageti rapid un rand aleatoriu din baza de date? http://goo.gl/fb/JaND #WorldIT…

  3. Extracting a random column from sql database « Programming « Area72 spune:
    februarie 6, 2010 la 11:47 pm

    […] Article translated from worldit.info. […]


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • august 2022
    L Ma Mi J V S D
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Cum sa extrageti rapid un rand aleatoriu din baza de date?
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons