2012-01-31 144 views
-2

好吧,标题可能有点误导。我想要做的是添加一个最喜欢的系统到我的网站。我为我最喜欢的东西准备了一个专栏,我在每个商品ID之后都设置了一个:。如何检查从我的数据库返回的字符串(1345:13456:232:524378:324)如果它包含232?如果是这样,我会回应preRend否则我会回应insert并插入该ID后跟:。这是我到目前为止:PHP检查MySQL表是否包含值

<?php 
session_start(); 
require_once(".conf.php"); 
$logged = $_SESSION['logged']; 
$user = $_SESSION['user']; 
$fwdfav = $_POST['id']; 
$query = mysql_query("SELECT * FROM accountController WHERE user='$user'"); 

if ($logged == 1) 
{ 
    while ($row = mysql_fetch_array($query)) { 
    if ($row['fav-itms'] //This is where I got stuck. How to check if it contains a value.) 
     { 
      mysql_query("INSERT INTO accountController ('fav-itms') VALUES ('$fwdfav')"); 
      echo 'inserted'; 
     } 
     else 
     { 
      echo 'preRend'; 
     } 

    } 
} 
else 
{ 
    echo 'nlog'; 
} 
?> 

非常感谢!我相信这里有很多错误,因为我很累。

+6

**不要在关系数据库列中存储分隔字符串**使用[交接表](http://en.wikipedia.org/wiki/Junction_table)创建*多对多*关系 – Phil 2012-01-31 04:28:08

+0

坏主意取决于系统,但假设你负责代码和数据库,它不是一种理智的方式,因为关系表非常易于管理,并且可以完全消除你在这里提到的问题。如果你的网站很小,那么爆炸与简单加入的处理没有什么区别,所以理性的论点是这种方法的可持续性,并且如果其他任何人还活着愿意拿起你离开的地方。如果我肯定继承了这种方法,我会生气。特别是考虑关系表的设置和管理有多容易。 – 2012-01-31 04:38:41

+0

@JosephTorraca,那么拥有一个数据库有什么意义呢?为什么不把所有内容都转储为400列宽的CSV?答案当然是,你不能轻松地对你在该领域拥有的数据进行排序,加入,聚合或其他任何事情。你正在渲染你的数据库对这些数据没用。 – Brad 2012-01-31 04:39:34

回答

2

你正在服用的方法是非常低效的,并没有考虑的事实,你的优势正在使用数据库。

(顺便说一句...我希望这只是示例代码,你必须在你的INSERT查询一个巨大的SQL注入漏洞。)

我会做的,而不是为创建一个看起来像第二个表:

favorites (
    id int(11) NOT NULL auto_increment, 
    user_id int(11), 
    fav_id int(11) 
) 

并让每一行都代表一个用户喜欢的对。然后,你可以让MySQL的做搞清楚用户是否收藏东西的重任,例如,

SELECT COUNT(*) FROM favorites WHERE user_id = %d AND fav_id = %d; 
// Substitute the actual look-up values in using prepared statements 

你也可以同样迅速得到了用户的实际收藏夹等

记住,数据库旨在用于快速存储和查找信息的明确目的。 PHP是一种通用编程语言。在可能的情况下,让MySQL为你做好准备。如果你需要处理数百万并发用户,显然需要更多的优化,而传统的关系数据库可能甚至不适合,但我没有得到印象这就是你现在的位置。)

+0

是的,这只是示例代码,以解释我的意思。而且你是对的,我没有接近大规模,数百万的要求,尽管我想成为。也许几年。这是如何做关系数据库的一个很好的例子,我想我会在我的网站上使用这个确切的例子。太感谢了! – 2012-01-31 04:45:19

1

你可以在阵列爆发,作为检查,如:

 

$yourArr = explode(":", $row['fav-itms']); 
$checkFor = 232; 
if(in_array($checkFor, $yourArr)) { 
    //it exists 
} 
else { 
    //does not exist 
} 
 

你的意思是这样

+0

好吧,如果这解决了您的问题,那么您可以让它接受.. :) – 2012-01-31 04:32:57

+1

请不要这样做...阅读以上评论和下面。 – 2012-01-31 04:41:21

0

我知道这是前一段时间发布的,但是当我进行搜索时就出现了。

我有一个数据库存储我的投资组合的信息,它包含图像的位置。

我正在一个页面上显示项目的完整视图。在页面内,我需要它检查图像的列,如果有任何是空的,我需要它不显示任何东西。

这就是我已经做到的。

//连接,选择数据库,查询与页面相关的表。我已经完成了对特定行的查询。

if($row[columnName1]){ 
     echo '<div> displaying value </div>'; 
    } 
    if($row[columnName2]){ 
     echo '<div> displaying value </div>'; 
    } 

发生了什么,如果所选行中的columnName1具有值,则显示div中的值else否。然后到第2栏。

如果是这样

if(!$row[columnName1]){ 
      //content displayed 
    } 

完成,列不包含值又是什么在{}将跑之间。

以我需要的方式工作,也许这会帮助某人。