Добрый всем день! У меня проблемка возникла небольшая со ссылками на новости... А проблема в запросе как я полагаю... Попробую описать: У меня есть таблица, в которой есть поле id и поле cpu ну и еще куча всяких полей, но эт неважно... И мне нужно чтобы при запросе новости в браузере новость отображалась по id (это у меня реализовано) или если заполнено поле cpu то ссылка уже бралась бы из этого поля, в принципе это я реализовал и подмена происходит... Но при нажатии по ссылке могу сделать чтобы работало или то или другое, а мне нужно чтобы если поле cpu заполнено чтобы данные брались из него, а если нет, то ид... Вот такой вот у меня запрос, но не пойму что тут непрвильно PHP: <?php if (!empty($_GET['id'])) $where.="cpu='".mysql_real_escape_string($_GET['id'])."'"; $sql="SELECT * FROM `news` WHERE $where";?> В таком виде работаю только ссылки у которых есть что-то в поле cpu, если меняю Код (Text): $where.="cpu=' на Код (Text): $where.="id=' то работают новости у которых поле cpu свободно... При чем ошибки не показываются, а просто чистый лист... Помогите поправить...
ващет не совсем понятно что тебе надо может: Код (Text): if (!empty($_GET['cpu'])) $where.="cpu='".mysql_real_escape_string($_GET['cpu'])."'"; else $where.="id='".mysql_real_escape_string($_GET['id'])."'"; ?
Не работает, точно также в одном случае чистый лист... Попробую объяснить подробнее что я пытаюсь сделать. Итак, есть поле id - куда вписывается порядковый номер новости и есть поле cpu, куда ручками я пишу так скажем альтернативную ссылку на эту новость! И мне нужна выборка при переходе в новость, если записана альтернативная ссылка, то чтоб открывалась она, если нет то чтоб по ид... Вот например обычная ссылка: http://site/modules/news.php?action=news&id=155 А вот так выглядит сслыка на новость если заполнено поле cpu: http://site/modules/news.php?action=news&id=nazvanie_nowosti Так вот делать выборку на стадии перехода я научился и сделал, все работает и ссылки меняются, но вот при переходе работает либо одна сслыка, либо другая, а мне надо чтобы работало все, так как у меня не у всех новостей заполнено поле cpu... Вот так работают только те новости, у которых заполнено поле cpu PHP: <?php if (!empty($_GET['id'])) $where.="cpu='".mysql_real_escape_string($_GET['id'])."'"; $sql="SELECT * FROM `news` WHERE $where";?> А так те новости, которые выводятся по id PHP: <?php if (!empty($_GET['id'])) $where.="id='".mysql_real_escape_string($_GET['id'])."'"; $sql="SELECT * FROM `news` WHERE $where";?> Т.е. я меняется Код (Text): $where.="cpu=' на Код (Text): $where.="id=' Ну а как мне модифицировать тот код, может кто подскажет??? С вариантом от QQQ тоже самое что и с моим...
PHP: <?php if( !empty($_GET['id'])) $where.='IFNULL(cpu, id) = "' .mysql_real_escape_string($_GET['id']) .'"'; $sql = 'SELECT * FROM `news` WHERE ' .$where; ?> Боги улыбаются тебе
Ну а в чем она еще может быть??? больше не в чем, вот кусок кода который выводит новость: PHP: <?php if ($_GET['id']) { $where.="id='".mysql_real_escape_string($_GET['id'])."'"; } else { $where.="cpu='".mysql_real_escape_string($cpu)."'"; } $sql="SELECT * FROM `news` WHERE $where"; $result=mysql_query($sql); $num_results=mysql_num_rows($result); for ($i=0; $i<$num_results; $i++) { $row=mysql_fetch_array($result); $id=$row["id"]; $text=$row["text"]; $tema=$row["tema"]; echo '<b>'.$tema.'</b><br>'.$text.''; } ?>
PHP: <?php $result = mysql_query('SELECT `tema`, `text` FROM `news`' .(!empty($_GET['id']) ? ' WHERE IFNULL(cpu, id) = "' .mysql_real_escape_string($_GET['id']) .'"' : '')) or die('[' .mysql_errno() .']: ' .mysql_error()); while($row = mysql_fetch_assoc($result)) echo '<b>' .$row['tema'] .'</b><br>' .$row['text']; ?> Смертные должны склонться перед Богом!
В базе: Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно id int(11) Да NULL auto_increment cpu varchar(255) cp1251_general_ci Да Десь все прально вроде, в чем может тут быть проблема не понятно...
Толи я чего-то не понимаю, толи... толи тупо лыжи не едут. Код (Text): if (!empty($_GET['cpu'])) $where.="cpu='".mysql_real_escape_string($_GET['cpu'])."'"; else $where.="id='".mysql_real_escape_string($_GET['id'])."'"; $sql="SELECT * FROM `news` WHERE $where"; echo $sql; Приведи пример ссылок и результат отработки по ним этого кода.
Привожу пример ссылок: обычная ссылка - выводится по id: http://site/modules/news.php?action=news&id=155 Ссылка на новость если заполнено поле cpu: http://site/modules/news.php?action=new ... ie_nowosti А вот что происходит при том коде который ты дал - это вывод новости по ссылке http://site/modules/news.php?action=news&id=155: SELECT * FROM `news` WHERE id='158' и новость выводится, потому как ид равен реальному А вот это вывод нвоости по ссылке http://site/modules/news.php?action=new ... ie_nowosti т.е. поле cpu заполнено: SELECT * FROM `news` WHERE id='nazvanie_nowosti' тут же опять происходит обращение к id, но по идее должно быть к cpu...
PHP: <?php $result = mysql_query('SELECT `tema`, `text` FROM `news`' .(!empty($_GET['id']) ? ' WHERE cpu = "' .mysql_real_escape_string($_GET['id']) .'" OR id = "' .mysql_real_escape_string($_GET['id']) .'"' : '')) or die('[' .mysql_errno() .']: ' .mysql_error()); while($row = mysql_fetch_assoc($result)) echo '<b>' .$row['tema'] .'</b><br>' .$row['text']; ?> Божий дар, даруется с миром.
Спасибо, ва за помощь. Я уже сам разобрался. Просто в поле type попадал лишний пробел . Insert into ....... Values (... '$type ' , ....)
Помогите решить мою проблему: Вот обращение к базе данных: $sql="SELECT * FROM players ORDER BY points DESC"; $result=mysql_query($sql,$db); $position = mysql_num_rows($result); У меня переменная $position получила значение 5, при этом посчитались все строки таблицы, а мне нужно посчитать (получить номер строки отсортированной таблицы) до поля, где name = $name т.е. $result: id, name, *points 2 name1 9 3 name2 5 1 name3 2 4 name4 2 Мне нужно посчитать сколько строк от name1 до name3 и получить эту цифру в переменную $position, таблица отсортирована по points как DESC Заранее огромное спасибо !
Есть таблица players: id, name, points 1 name1 8 2 name2 5 3 name3 6 4 name4 10 Нужно отсортировать по points как DESC и занести в переменную $position номер строки c именем name1. Итого должно получиться что $position = 2
SELECT COUNT(*) FROM tbl WHERE id BETWEEN (SELECT MIN(points) FROM tbl) AND (SELECT MAX(points) FROM tbl) ORDER BY points DESC
select count(*) as cnt from tbl where points>(select points from tbl where name='name1') результат будет cnt+1