簡體   English   中英

MySQL減少查詢數量

[英]Mysql reducing number of queries

我在table1中有3列:帳簿,鍵和值。

| book |   key    |  value   |    
------------------------------             
|  1   |  author  |    a     |              
|  1   |  editor  |    b     |        
|  1   |  book    |    c     |      

而不是運行三個查詢

$data = mysql_query("
      SELECT * FROM table1 WHERE book = '1' AND key = 'author'
             ")  or die(mysql_error());  

while($info = mysql_fetch_array( $data ))
  {
       $value1 = $info['value'];
  }

然后為編輯器和書籍重復此操作。

$ value1 $ value2 $ value3插入頁面上的不同位置

我可以用一個查詢做到這一點嗎?

是。 如果沒有“ book = 1”的其他條目,則只需查詢

SELECT * FROM table1 WHERE book = '1'

如果還有更多條目,則可以使用以下查詢:

SELECT * FROM table1 WHERE book = '1' AND key IN('author','editor','book')

然后創建一個assoc數組:

while($info = mysqli_fetch_assoc( $data ))
  {
       $value[$info['key']] = $info['value'];
  }

...

echo "the book {$value['book']} was written by {$value['author']}";

為了創建一個$ value數組,您必須使用this:

$value[] = $info['value'];

代替這個:

$value1 = $info['value'];

可以使用此代碼:

$value[]["key"] = $info['key'];
$value[]["value"] = $info['value'];

例如,您可以使用$value[0]["value"]調用第一行的值

如果您希望單個記錄中的值,請嘗試以下操作:

SELECT `t1`.`value` AS `value1`, `t2`.`value` AS `value2`, `t3`.`value` AS `value3`
FROM
    `table1` AS `t1` CROSS JOIN
    `table1` AS `t2` CROSS JOIN
    `table1` AS `t3`
WHERE
    (`t1`.`book` = 1) AND (`t1`.`key` = 'author')
    AND (`t2`.`book` = 1) AND (`t2`.`key` = 'editor')
    AND (`t3`.`book` = 1) AND (`t3`.`key` = 'book');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM