Подскажите плиз, может ли из-за слабенького или неправильно настроенного сервера, "съедатья записи"? Делаю выборку из таблицы в которой 1425 позиций. Выбираю все, где а1=1, а2=1, а3=1... Смотрю через PMA таких 287 штук (руками вбивал и проверял)... При выборке со страницы сайт выдает 240... Никаких других ограничений нет...
В чем может быть причина??? Весь мозг съел уже... Грешу на сервер, но... хз... Лимиты не стоят...
Спустя 1 час, 10 минут, 35 секунд (26.08.2011 - 01:11) Invis1ble написал(а):
Код выборки в студию
Спустя 33 минуты, 2 секунды (26.08.2011 - 01:44) liberty87 написал(а):
$categ=intval($_GET['categ']);
$nr=$_GET['nr'];
$nov=$_GET['nov'];
$w.=(!empty($categ)?" and tovar.categ='".$categ."'":"");
$w.=(!empty($nr)?" and tovar.nr='1'":"");
$w.=(!empty($nov)?" and tovar.nov='1'":"");
$sql->query("SELECT tovar.id, tovar.name, tovar.article,tovar.image,
tovar.color,tovar.cena,tovar.s1,tovar.s2,tovar.s3,tovar.s4,tovar.s5,tovar.s6
FROM tovar
LEFT JOIN tovar_color ON tovar.id=tovar_color.id_tovar
LEFT JOIN tovar_razmer ON tovar.id=tovar_razmer.id_tovar
INNER JOIN category ON tovar.categ=category.id
WHERE tovar.enable=1 and tovar.d=1".$w."
GROUP BY tovar.id
ORDER BY tovar.z".(!empty($nov)?"_nov":"").(!empty($nr)?"_naryad":"").((empty($nr)&&empty($nov)&&empty($categ))?"_coll":"")."
asc");
Спустя 18 минут, 47 секунд (26.08.2011 - 02:03) inpost написал(а):
1. Напиши: mysql_num_rows - получишь количество выбранных записей.
Сразу же на этой же странице отдельно напиши точь в точь запрос, только $sql->query замени на echo (одновременно с самим запросом).
Запрос выведется на экране, его копи-пасти и вставляй в PMA, смотри там результат по количеству выбора из БД записей.
Ещё одно пояснение, имена ячеек и таблиц возьми в обратную кавычку:
и т.д.
Сразу же на этой же странице отдельно напиши точь в точь запрос, только $sql->query замени на echo (одновременно с самим запросом).
Запрос выведется на экране, его копи-пасти и вставляй в PMA, смотри там результат по количеству выбора из БД записей.
Ещё одно пояснение, имена ячеек и таблиц возьми в обратную кавычку:
SELECT `tovar`.`id`,`tovar`.`name`
FROM `tovar`
и т.д.
Спустя 33 минуты, 15 секунд (26.08.2011 - 02:36) liberty87 написал(а):
^) inpost, спасибо... Че-йто до такого метода дбага я не дотумкал... Оказался лишний параметр... Спасибо большое! Все работает!!! =)))
Спустя 4 часа, 39 минут, 3 секунды (26.08.2011 - 07:16) linker написал(а):
Второй вариант дебага, перед тем как выполнить запрос сделать ему echo и посмотреть, всё ли там впорядке.
Спустя 13 минут, 34 секунды (26.08.2011 - 07:29) twin написал(а):
Третий вариант - снабдить метод $sql->query кодом, который сам выводит текст запроса на экран. Вот примерно так:
Во первых он сразу покажет всю подноготную при ошибке, во вторых можно поставить true или просто единичку вторым параметром и смотреть в чем дело:
Ну и при желании можно запрос слогировать.
public function query($sql, $print = false)
{
$result = mysql_query($sql);
if($result === false || $print)
{
$error = mysql_error();
$trace = debug_backtrace();
$head = $error ?'<b style="color:red">MySQL error: </b><br>
<b style="color:green">'. $error .'</b><br><br>':NULL;
$error_log = date("Y-m-d h:i:s") .' '. $head .'
<b>Query: </b><br>
<pre><span style="color:#CC0000">'. $trace[0]['args'][0] .'</pre></span><br><br>
<b>File: </b><b style="color:#660099">'. $trace[0]['file'] .'</b><br>
<b>Line: </b><b style="color:#660099">'. $trace[0]['line'] .'</b>';
die($error_log);
else
return $result;
}
Во первых он сразу покажет всю подноготную при ошибке, во вторых можно поставить true или просто единичку вторым параметром и смотреть в чем дело:
$sql->query("SELECT ........", true);
Ну и при желании можно запрос слогировать.