iT邦幫忙

0

MYSQL 語法問題!!!

harry789111 7 月前3426 瀏覽

Dear IT前輩們...
有一段php的SQL語法,不知道是我語法用錯還是哪裡有問題...SQL陣列ROW無法正常寫入條件
因為資料表initial有人名test1 test2 test3的資料,ECHO也印的出來資料也正常顯示這三筆資料,不過php條件卻無法顯示,有test1的資料!!!反而ECHO出沒有!!!應該要ECHO有才對...
麻煩大大幫我解惑ˊˋ

<?
$result10=mysql_query("SELECT * from initial where season = '2017Q1'"); 
while($row10 = mysql_fetch_array($result10, MYSQL_ASSOC)) 
echo $row10['englishname']."<br>"; 
if ($row10['englishname']== 'test1')
{echo '有';}
else {echo '沒有';}	
?>
0
海綿寶寶
iT邦超人 1 級 ‧ 7 月前
最佳解答
<?
$hasTest1 = false;
$result10=mysql_query("SELECT * from initial where season = '2017Q1'"); 
while($row10 = mysql_fetch_array($result10, MYSQL_ASSOC)) {
   echo $row10['englishname']."<br>"; 
   if ($row10['englishname']== 'test1') {
      hasTest1 = true;
   }
}

if ($hasTest1) {
   echo '有';
}  else {
   echo '沒有';
}	
?>
看更多先前的回應...收起先前的回應...
harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

感謝海綿大,目前是OK!!!
如果是200個User就要定義200次@@
是否有個方法不用定義兩百次的方向:)
先給你最佳解答^^

海綿寶寶 iT邦超人 1 級 ‧ 7 月前 檢舉

如果是200個User就要定義200次@@

太好了
你終於自己發現程式這樣寫的問題了
一般是不會把200個User寫死在程式裡
一般會把200個User記錄在資料庫中
在SELECT initial 時一起做「比對」的動作

harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

是阿,這是一個嚴重的問題…
海綿大,是否有程式範例來研究一下呢:)
努力把程式學好中ˊˋ

harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

海綿大大約知道你的意思,資料庫在建立一個資料表是這兩佰的User名字,之後用PHP取得這個新資料表的陣列,之後在去Select initial這張表的陣列去做比對!!!上面程式這個改成這樣對不對
if ($row10['englishname']== '新的Table陣列')
請海綿大指教ˊˋ

海綿寶寶 iT邦超人 1 級 ‧ 7 月前 檢舉

不對
既然用了資料庫
就要用資料庫的功能,不要自己寫
包括:排序、搜尋、比對
你這裡想做的
可以用Left Outer Join做到
如果懶得看
這裡有範例
用 flag 來判斷要不要反白

harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

OK,感謝海綿大,不過我最後還是要利用條件去判斷下拉式是否反灰@@

<?
if ($id == 'D0373' or $id == 'D0483')
{
echo "部門/姓名:   <SELECT NAME='ptprovince' SIZE='1' >
      <OPTION value='0'>---請選擇---</OPTION>	  
      <optgroup selected='true' label='資訊課'>";
	  
      if ($id == 'D0483' ){echo "<option value='pulleylee'>pulleylee</option>";}	  
      if ($id == 'D0483' ){echo "<option value='alpha_hong'>alpha_hong</option>";}
	  if ($id == 'D0483' ){echo "<option value='harry_chien'>harry_chien</option></SELECT>";}
 

      if ($id == 'D0373'){echo "<option value='alpha_hong'>alpha_hong</option>";}
	  if ($id == 'D0373'){echo "<option value='harry_chien'>harry_chien</option></SELECT>";}
	  
?>
	  
}	  
海綿寶寶 iT邦超人 1 級 ‧ 7 月前 檢舉

問題解決了就好
我是看了有點/images/emoticon/emoticon06.gif

1
Samと可樂快跑
iT邦研究生 4 級 ‧ 7 月前
$result = mysql_query("SELECT * FROM initial WHERE season = '2017Q1' AND englishname = 'test1'");
if (mysql_num_rows($result) > 0) {
    echo '有';
}else{
    echo '沒有';
}

明明就是個能直接用資料庫就做掉的………
不過你知道現在應該要學PDO才對嗎?

harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

大大,之後會開始學PDO...

0
wonton
iT邦高手 6 級 ‧ 7 月前

您的程式分成三個區段,第一段是SQL查詢

$result10=mysql_query("SELECT * from initial where season = '2017Q1'"); 
while($row10 = mysql_fetch_array($result10, MYSQL_ASSOC)) 

第二段是 while 子句

while($row10 = mysql_fetch_array($result10, MYSQL_ASSOC)) 
echo $row10['englishname']."<br>";

第三段是檢查是否有 test1

if ($row10['englishname']== 'test1')
{echo '有';}
else {echo '沒有';}

換句話說,在跑完第二段之後,三筆資料都已經顯示出來了,這時的 $row10['englishname'] 的值是最後一筆資料,也就是 test3,當然程式在執行第三段時,就只好顯示沒有。

所以如果要一邊顯示資料,一邊檢查是否有 test1,就要把第三段包進到第二段裡面,像這樣即可。

while ($row10 = mysql_fetch_array($result10, MYSQL_ASSOC))  {
    echo $row10['englishname']."<br>";
    if ($row10['englishname']== 'test1') {
        echo '有';
    } else {
        echo '沒有';
    }
}
wonton iT邦高手 6 級 ‧ 7 月前 檢舉

如果要全部輸出後,再顯示有或沒有,則要像海綿寶寶的回答一樣,在while 區段中用加入一個變數來控制。

harry789111 iT邦新手 4 級 ‧ 7 月前 檢舉

感謝大大的回覆,讓我獲得許多知識:)

我要發表回答

立即登入回答