开发者

Mysql reducing number of queries

I have 3 columns in table1: book, key and value.

| book |   key    |  value   |    
------------------------------             
|  1   |  author  |    a     |              
|开发者_运维技巧  1   |  editor  |    b     |        
|  1   |  book    |    c     |      

Instead of runnuing three queries

$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'];
  }

Then repeat this for editor and book.

$value1 $value2 $value3 are inserted in different places on page

Could I do this with one query?


Yes. If there are no other entries with "book = 1" you just query

SELECT * FROM table1 WHERE book = '1'

If there are more entries you can use this query:

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

And then create an assoc array:

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

...

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


for create a $value array you have to use this :

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

instead of this :

$value1 = $info['value'];

Also you can use this code :

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

And for example you can call first row's value with $value[0]["value"]


If you want the values in a single record try this:

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');
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜