php mySQL, assoc.array gibi sayı, mağaza değerleri ile tek satır almak

3 Cevap php

Tüm bu oldukça yeni, bu yüzden çılgın bir şekilde benim bulmaca hakkında gidiyorum, söyle lütfen!

Ben sütunları başlık, köprü, ImageLink ile mySQL veritabanında bir tablo var

Ben rastgele bir satır seçmek için php, sonra php değişkenler olarak başlık, köprü ve ImageLink kaydetmek mümkün istiyorum. (Yani I can sonra html içine çıktı bunları)

yani örneğin için olabilir

fikir edinmek için psuedoey kod

chosenNumber = randomNumber();

$chosenTitle = title[chosenNumber]
$chosenHyperlink = hyperlink[chosenNumber]
$chosenImagelink = imagelink[chosenNumber]

echo "<a href = $chosenTitle><img src= $chosenImagelink/> $chosenTitle </a>";

Ben burada böyle bir doç dizi kullanmak gerekiyor ama ben fetch_assoc fetch_row vb çeşitli php mySQL ile baktı ve ben gerekenleri yapmak için hangi birini bulamıyorum, çünkü çok karıştı düşünüyorum: (

Ne çok uzak olması

// database table name information
$number = "number";
$title = "title";
$hyperlink = "hyperlink";
$imagelink = "imagelink";

// sql to select all rows of adverts
$sql = "SELECT $number, $title, $hyperlink, $imagelink FROM $table";

//execute the sql
$data = mysql_query($sql, $link);

//count the number of rows in the table
$bannerCount = mysql_num_rows($data);

//generate a random number between 0 and the number of rows
$randomNumber = mt_rand(0, $bannerCount); //do I need to do bannerCount-1 or similar here?
$chosenNumber = $randomNumber;

//select data from a random row

İlk kez sonrası, nazik olun lütfen, ve herhangi bir yanıt ya da açıklama için teşekkürler!

3 Cevap

Kullanımı ORDER BY RAND() LIMIT 1 küçük bir masanın dışında tek bir satır almak için iyi bir yoldur. Bu yöntemi kullanmanın dezavantajı RAND() tablodaki her satır için hesaplanması gerekir, ve sonra bir sıralama istediğiniz satır hesaplamak için bu non-endeksli değerleri üzerinde yapılmalıdır olmasıdır. Tablo büyüdükçe, ORDER BY RAND() korkunç verimsiz olur. Bu işlemek için daha iyi bir yolu ilk tablodaki satır sayısını sayısını almak okumak için rastgele bir satır sayısını hesaplamak, ve SQL sorgusuna LIMIT [offest,] count seçeneğini kullanmak için:

$sql = "SELECT COUNT(*) as rows FROM $table"
$res = mysql_query($sql);
if (!$row = mysql_fetch_assoc($res)) {
  die('Error Checking Rows: '.mysql_error());
}
$rows = $row['rows'];

// now that we know how many rows we have, lets choose a random one:
$rownum = mt_rand(0, $rows-1);
$sql = "SELECT number, title, hyperlink, imagelink FROM $table LIMIT $rownum,1";
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);

// $row['number'] $row['title'] etc should be your "chosen" row

Bu ilk sorgu, kaç satır mevcut nasıl SQL Server sorar ardından LIMIT sadece biz aldı rasgele sayı satırdan başlayarak, 1 satır dönmek için gerçek sorgu sonuç kümesi var.

Sana "sınır" tümcesi kullanırsanız, oldukça verimli olacağını düşünüyorum:

SELECT number, title, hyperlink, imagelink FROM $table order by rand() limit 1

Neden tablo adını ve alan adları için değişkenler kurarım?

Eğer rastgele kayıtlarını almak istiyorsanız, sadece isterseniz sadece sorgu ve limit fıkrası order by rand() ekleyin, sizin sql sorgu ve kayıtların rastgele sipariş alacak her zaman değiştirebilirsiniz Sadece bir rastgele kayıt almak için:

$sql = "SELECT $number, $title, $hyperlink, $imagelink FROM $table
order by rand() limit 1";

Bunu yaptıktan sonra, aslında satır almak için mysql_fetch_array veya mysql_fetch_object gibi fonksiyonları kullanmak gerekir:

$data = mysql_query($sql, $link);

while ($row = mysql_fetch_array($data))
{
  echo $row['title'] . '<br />';
  echo $row['hyperlink'] . '<br />';
  echo $row['imagelink'] . '<br />';
}

Ile:

$row = mysql_fetch_array($data)

Sen gibi sayfanızın herhangi bir yerinde değerlerini yankı emrinde mevcut $row dizisi var:

  echo $row['title'];
  echo $row['hyperlink'];
  echo $row['imagelink'];