我有以下数据库方案:
table 'products'
id
category_id
当然还有一个类别表,只有一个id。
数据看起来像这样:
Products
--------------------
| id | category_id |
--------------------
| 0 | 1 |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 1 |
--------------------
我想选择一个类别(例如类别1),因此我选择了product-repository类中该类别的所有行:
return $this
->createQueryBuilder('u')
->andWhere('u.category = :category')
->setMaxResults(1)
->setParameter('category', $category->getId())
->getQuery()
->getSingleResult()
;
我现在如何选择随机产品?另外:是否有可能通过关系来解决这个问题?
我在实体“类别”和“产品”之间有一个OneToMany关系,所以我也可以通过category-> getProducts()获得所有产品......
任何帮助都非常有用,谢谢
答案 0 :(得分:12)
首先必须计算产品总数,然后生成随机偏移量以选择随机产品。
这应该让你开始:
$count = $this->createQueryBuilder('u')
->select('COUNT(u)')
->getQuery()
->getSingleScalarResult();
然后您可以在1和总行数之间生成一个随机数。
return $this->createQueryBuilder('u')
->where('u.category = :category')
->setFirstResult(rand(0, $count - 1))
->setMaxResults(1)
->setParameter('category', $category->getId())
->getQuery()
->getSingleResult()
;
转换为:
SELECT * FROM products WHERE category_id = ? LIMIT 1, {random offset}
答案 1 :(得分:0)
使用此辅助功能:
using (WebClient client = new WebClient())
{
var data = new NameValueCollection();
data.Add("userid", userid.ToString());
data.Add("password", password);
byte[] response = client.UploadValues(Url, data);
string rep = client.DownloadString("http://xxxx.fr/CreateProfile.php");
Toast.MakeText(this, rep, ToastLength.Short).Show();
}
使用示例:
if ($data === "404"){
echo "Student doesn't exist";
}
else{
$checkIfExist= "SELECT name FROM users WHERE id = $user_id";
if($result = $conn->query($checkIfExist)) {
$row_cnt = $result->num_rows;
}
if ($row_cnt > 0){
echo "User already exist.";
}
else{
echo"New user";
}