ホームページ  >  記事  >  バックエンド開発  >  SQLで生成した集合を目的の文字列に変換する方法!

SQLで生成した集合を目的の文字列に変換する方法!

WBOY
WBOYオリジナル
2016-06-23 13:39:26861ブラウズ

query('SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE "%I love you%"')

上記のクエリの ID を文字列に結合したいのですが、その方法がわかりません
例えば5つ出力されます ID値は1,2,3,4,5です
今度はこの5つの値をこんな感じの文字列に変換したいと思います
(1,2,3,4,5)
やり方が分かりません

以下の方法を試してみましたが、うまくいきませんでした
$result=query('SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE "%I love you% "');
$foodsPic=array();
while($row=mysql_fetch_array($result)){
$foodsPic[]=$row;
}

print_r($foodsPic);
上記の方法だけではありませんID を取得しますが、他の不要な ID も削除します。ID のコレクションが必要なだけで、処理を通じてこれらの ID を文字列 (1,2,3,4,) に変換できます。 5)
改善方法がわかりません


ディスカッションへの返信 (解決策)

$SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%'";$result=mysqli_query($link,$SQ);$idStr='';if(mysqli_num_rows($result)){    $data=mysqli_fetch_all($result,MYSQL_ASSOC);    foreach($data as $value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}

$SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%'";$result=mysqli_query($link,$SQ);$idStr='';if(mysqli_num_rows($result)){    $data=mysqli_fetch_all($result,MYSQL_ASSOC);    foreach($data as $value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}


書いてみてもまだ機能しませんが、あなたの意見は正しいと思います。その考えは正しいですが、データベース操作クラスの 1 つは使用しません
たとえば、使用した関数の 1 つは mysqli_fetch_all です
情報を確認したところ、この関数は禁止されているようです
さらに、データベース関数もあります。私のシステムの操作クラスを投稿してください
<?phpdefine('InEmpireCMSDbSql',TRUE);class mysqlquery{	var $dblink;	var $sql;//sql语句执行结果	var $query;//sql语句	var $num;//返回记录数	var $r;//返回数组	var $id;//返回数据库id号	//执行mysql_query()语句	function query($query){		global $ecms_config;		$this->sql=mysql_query($query,return_dblink($query)) or die($ecms_config['db']['showerror']==1?mysql_error().'<br>'.str_replace($GLOBALS['dbtbpre'],'***_',$query):'DbError');		return $this->sql;	}	//执行mysql_query()语句2	function query1($query){		$this->sql=mysql_query($query,return_dblink($query));		return $this->sql;	}	//执行mysql_query()语句(选择数据库USE)	function usequery($query){		global $ecms_config;		$this->sql=mysql_query($query,$GLOBALS['link']) or die($ecms_config['db']['showerror']==1?mysql_error().'<br>'.str_replace($GLOBALS['dbtbpre'],'***_',$query):'DbError');		if($GLOBALS['linkrd'])		{			mysql_query($query,$GLOBALS['linkrd']);		}		return $this->sql;	}	//执行mysql_query()语句(操作数据库)	function updatesql($query){		global $ecms_config;		$this->sql=mysql_query($query,return_dblink($query)) or die($ecms_config['db']['showerror']==1?mysql_error().'<br>'.str_replace($GLOBALS['dbtbpre'],'***_',$query):'DbError');		return $this->sql;	}	//执行mysql_fetch_array()	function fetch($sql)//此方法的参数是$sql就是sql语句执行结果	{		$this->r=mysql_fetch_array($sql);		return $this->r;	}	//执行fetchone(mysql_fetch_array())	//此方法与fetch()的区别是:1、此方法的参数是$query就是sql语句 	//2、此方法用于while(),for()数据库指针不会自动下移,而fetch()可以自动下移。	function fetch1($query)	{		$this->sql=$this->query($query);		$this->r=mysql_fetch_array($this->sql);		return $this->r;	}	//执行mysql_num_rows()	function num($query)//此类的参数是$query就是sql语句	{		$this->sql=$this->query($query);		$this->num=mysql_num_rows($this->sql);		return $this->num;	}	//执行numone(mysql_num_rows())	//此方法与num()的区别是:1、此方法的参数是$sql就是sql语句的执行结果。	function num1($sql)	{		$this->num=mysql_num_rows($sql);		return $this->num;	}	//执行numone(mysql_num_rows())	//统计记录数	function gettotal($query)	{		$this->r=$this->fetch1($query);		return $this->r['total'];	}	//执行free(mysql_result_free())	//此方法的参数是$sql就是sql语句的执行结果。只有在用到mysql_fetch_array的情况下用	function free($sql)	{		mysql_free_result($sql);	}	//执行seek(mysql_data_seek())	//此方法的参数是$sql就是sql语句的执行结果,$pit为执行指针的偏移数	function seek($sql,$pit)	{		mysql_data_seek($sql,$pit);	}	//执行id(mysql_insert_id())	function lastid()//取得最后一次执行mysql数据库id号	{		$this->id=mysql_insert_id($GLOBALS['link']);		if($this->id<0)		{			$this->id=$this->gettotal('SELECT last_insert_id() as total');		}		return $this->id;	}	//返回影响数量(mysql_affected_rows())	function affectnum()//取得操作数据表后受影响的记录数	{		return mysql_affected_rows($GLOBALS['link']);	}}?>

たとえば、
最初にこのクラスをインスタンス化して
$empire-> メソッドを使用すると、上記を書き換えて、

$SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%'";$result=mysqli_query($link,$SQ);$idStr='';if(mysqli_num_rows($result)){    $data=mysqli_fetch_all($result,MYSQL_ASSOC);    foreach($data as $value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}

<?php$sqld=$empire->query('SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE "%现货促销产品%"');//查询副表下的infotags字段$idStr='';if($empire->num($sqld)){    $data=$empire->fetch($sqld);    foreach($data as $key=>$value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}?>

と書き換えましたが、何が間違っているのかわかりません

$SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%'";$result=mysqli_query($link,$SQ);$idStr='';if(mysqli_num_rows($result)){    $data=mysqli_fetch_all($result,MYSQL_ASSOC);    foreach($data as $value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}

と書いて結果が出ましたが、全部aでした。結合された数字の混乱
$sqld=$empire->query('SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1. infotags LIKE "%I love you%"');// セカンダリ テーブルの下の infotags フィールドをクエリします
$ idjh=array();
while($bqrd=$empire->fetch($sqld)){
if( $bqrd[id])
$idStr.=$bqrd[id];
//$idStr= rtrim($idStr,','); etch_all は PHP の mysql データベースです。ドライバーは削除されていませんが、サーバーはこのサポートをオンにする必要があります。sea など、一部のサーバー環境ではサポートされていない可能性があります。自分自身でこのサポートを簡単に取得できます

また、mysqli_fetch_all は PHP の mysql データベースドライバーであるため削除されていますが、サーバーはこのサポートをオンにする必要があります。 sea... 一般に、自分でコンパイルしたサーバーはこのサポートを簡単に取得できます

このコードを foreach なしで while の形式に変更することは可能ですか? また、それを変更する方法はありますか? $SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%愛しています%'";

$result=mysqli_query($link,$SQ);

$idStr='';

if(mysqli_num_rows($result)){

$data=mysqli_fetch_all($ result,MYSQL_ASSOC);
foreach($data as $value){
if(isset($value['id']))
$idStr.= $value['id']
}


$idStr= rtrim($idStr,',');
echo $idStr;


//代码误导你了 修改一下  $idStr.=$bqrd[id].',';}$idStr=rtrim($idStr,',')



これを while フォームに変更できますか? その後、追加のポイントを取得できます

$SQ="SELECT infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%'";$result=mysqli_query($link,$SQ);$idStr='';if(mysqli_num_rows($result)){    $data=mysqli_fetch_all($result,MYSQL_ASSOC);    foreach($data as $value){        if(isset($value['id']))            $idStr.=$value['id'];    }        $idStr=rtrim($idStr,',');    echo $idStr;}

ID 配列をクエリできますそれを処理するために implode を使用する必要があるのはなぜですか?



id 配列をクエリし、implode を使用して処理することができるのはなぜですか?

書き方、コードなし、真実なし

//hava a try   SELECT GROUP_CONCAT(infotags SEPARATOR ",") as infotags,id FROM hd_ecms_shop_data_1 WHERE hd_ecms_shop_data_1.infotags LIKE '%我爱你%' GROUP BY infotags

//骚年,这是基本功的问题啊while($row=mysql_fetch_array($result)){    $id[]=$row['id'];}echo join(",",$id);


上仙,再请教一下
为啥
echo $row[id];//打印不出值,也不报错
    //echo join(",",$id);//能打印出值来

//骚年,这是基本功的问题啊while($row=mysql_fetch_array($result)){    $id[]=$row['id'];}echo join(",",$id);


上仙我搞错了,思维完全混乱造成的,
Array ( [0] => 9 [1] => 38 [2] => 39 [3] => 40 [4] => 36 [5] => 37 )

//骚年,这是基本功的问题啊while($row=mysql_fetch_array($result)){    $id[]=$row['id'];}echo join(",",$id);


上仙的方法不错,加分,希望今后再接再历,不要辜负我们对你的期望!钦此!

//骚年,这是基本功的问题啊while($row=mysql_fetch_array($result)){    $id[]=$row['id'];}echo join(",",$id);


嗯,上仙的方法不错,加分了,上仙!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。