Please help me to understand how to optimize mysql queries in php. When you have a lot of columns, prepared statement looks like
$inst = $db->prepare("insert into year_$year (user_name,type_of_day,month_row,day_1,day_2,day_3,day_4,day_5,day_6,day_7,day_8,day_9,
day_10,day_11,day_12,day_13,day_14,day_15,day_16,day_17,day_18,day_19,day_20,day_21,day_22,day_23,day_24,day_25,day_26,day_27,day_28,day_29,day_30,day_31)
values
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
$inst->execute($chunk_post[$init]);
this code is from here: http://govnokod.ru/php?page=356 where people ridicule shitty codes.
I do not understand how to do it in other way.
A little Joke:
u can use for ($i = 1; $i <= 31; i++) {}
to construct your Query ;)
The Reality:
Read about Database Normalization here: http://databases.about.com/od/specificproducts/a/normalization.htm
Your Ultimate goal should be the third normal form.
You should think about some Day which are linked to one Month.
think about a table month
and table day
.
Read about SQL JOIN
.
Sure, you will not have the DataType DateTime
?
This Question is way to broad to give you a solution instead of an learn here, learn there answer. Your Question is about basics.
there is option to use dibi library and use it this way:
$query = dibi::query("SELECT ...
FROM p... -- comment
WHERE p.id = %i
AND p.lang = %i", $id, 1);
$raw = $query -> fetchAll();
foreach($raw as $n => $row) {
array_push($output, Array('p_id' => $row['p'],//comment
'p_w' => $row['p2']
));
}
You can use PDO.
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
In this case even if you have many fields, you can recognize the fields without confusion.