За последние 24 часа нас посетили 16648 программистов и 1649 роботов. Сейчас ищут 2070 программистов ...

Выборка данных из таблицы

Тема в разделе "PHP и базы данных", создана пользователем darkgod, 2 окт 2008.

  1. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Добрый всем день!
    У меня проблемка возникла небольшая со ссылками на новости...

    А проблема в запросе как я полагаю...

    Попробую описать: У меня есть таблица, в которой есть поле id и поле cpu ну и еще куча всяких полей, но эт неважно... И мне нужно чтобы при запросе новости в браузере новость отображалась по id (это у меня реализовано) или если заполнено поле cpu то ссылка уже бралась бы из этого поля, в принципе это я реализовал и подмена происходит...

    Но при нажатии по ссылке могу сделать чтобы работало или то или другое, а мне нужно чтобы если поле cpu заполнено чтобы данные брались из него, а если нет, то ид...

    Вот такой вот у меня запрос, но не пойму что тут непрвильно

    PHP:
    1. <?php if (!empty($_GET['id'])) $where.="cpu='".mysql_real_escape_string($_GET['id'])."'";
    2. $sql="SELECT * FROM `news` WHERE $where";?>
    В таком виде работаю только ссылки у которых есть что-то в поле cpu, если меняю
    Код (Text):
    1. $where.="cpu='
    на
    Код (Text):
    1. $where.="id='
    то работают новости у которых поле cpu свободно...

    При чем ошибки не показываются, а просто чистый лист...

    Помогите поправить...
     
  2. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ващет не совсем понятно что тебе надо

    может:

    Код (Text):
    1.  
    2. if (!empty($_GET['cpu'])) $where.="cpu='".mysql_real_escape_string($_GET['cpu'])."'";
    3. else $where.="id='".mysql_real_escape_string($_GET['id'])."'";
    ?
     
  3. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Не работает, точно также в одном случае чистый лист...

    Попробую объяснить подробнее что я пытаюсь сделать.

    Итак, есть поле 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:
    1.  <?php if (!empty($_GET['id'])) $where.="cpu='".mysql_real_escape_string($_GET['id'])."'";
    2.  $sql="SELECT * FROM `news` WHERE $where";?>
    А так те новости, которые выводятся по id
    PHP:
    1.  <?php if (!empty($_GET['id'])) $where.="id='".mysql_real_escape_string($_GET['id'])."'";
    2.  $sql="SELECT * FROM `news` WHERE $where";?>
    Т.е. я меняется
    Код (Text):
    1. $where.="cpu='
    на
    Код (Text):
    1. $where.="id='
    Ну а как мне модифицировать тот код, может кто подскажет???

    С вариантом от QQQ тоже самое что и с моим...
     
  4. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1.  
    2. <?php
    3. if( !empty($_GET['id']))
    4.     $where.='IFNULL(cpu, id) = "' .mysql_real_escape_string($_GET['id']) .'"';
    5.  
    6. $sql = 'SELECT * FROM `news` WHERE ' .$where;
    7. ?>
    8.  
    Боги улыбаются тебе
     
  5. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Блин, тоже самое, че стоит первым, то и работает, а второе просто чистый лист (((
     
  6. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Значит проблема не тут.
     
  7. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Ну а в чем она еще может быть??? больше не в чем, вот кусок кода который выводит новость:

    PHP:
    1. <?php
    2. if ($_GET['id']) { $where.="id='".mysql_real_escape_string($_GET['id'])."'";
    3.  }  else { $where.="cpu='".mysql_real_escape_string($cpu)."'";         }
    4.  
    5. $sql="SELECT * FROM `news` WHERE $where";
    6. $result=mysql_query($sql);
    7. $num_results=mysql_num_rows($result);
    8.  
    9. for ($i=0; $i<$num_results; $i++)
    10.     {
    11.     $row=mysql_fetch_array($result);
    12.     $id=$row["id"];
    13.     $text=$row["text"];
    14.     $tema=$row["tema"];
    15.    
    16.  
    17.  
    18. echo '<b>'.$tema.'</b><br>'.$text.'';
    19.  
    20.    }
    21. ?>
     
  8. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1.  
    2. <?php
    3. $result = mysql_query('SELECT `tema`, `text`
    4.                        FROM `news`'
    5.                         .(!empty($_GET['id'])
    6.                            ? ' WHERE IFNULL(cpu, id) = "' .mysql_real_escape_string($_GET['id']) .'"' : '')) or
    7.            die('[' .mysql_errno() .']: ' .mysql_error());
    8.  
    9. while($row = mysql_fetch_assoc($result))
    10.     echo '<b>' .$row['tema'] .'</b><br>' .$row['text'];
    11.  ?>
    12.  
    Смертные должны склонться перед Богом!
     
  9. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Вставил прям полностью - итог тот-же (((
    Чета непонятно что такое и почему не работает(((
     
  10. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Значит лезь в базу и смотри что там.
     
  11. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    В базе:

    Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно
    id int(11) Да NULL auto_increment
    cpu varchar(255) cp1251_general_ci Да

    Десь все прально вроде, в чем может тут быть проблема не понятно...
     
  12. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Толи я чего-то не понимаю, толи... толи тупо лыжи не едут.

    Код (Text):
    1.  
    2. if (!empty($_GET['cpu'])) $where.="cpu='".mysql_real_escape_string($_GET['cpu'])."'";
    3. else $where.="id='".mysql_real_escape_string($_GET['id'])."'";
    4. $sql="SELECT * FROM `news` WHERE $where";
    5. echo $sql;
    Приведи пример ссылок и результат отработки по ним этого кода.
     
  13. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Привожу пример ссылок:
    обычная ссылка - выводится по 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...
     
  14. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1.  
    2. <?php
    3. $result = mysql_query('SELECT `tema`, `text`
    4.                       FROM `news`'
    5.                       .(!empty($_GET['id'])
    6.                           ? ' WHERE cpu = "' .mysql_real_escape_string($_GET['id']) .'"
    7.                                     OR id = "' .mysql_real_escape_string($_GET['id']) .'"' : '')) or
    8.           die('[' .mysql_errno() .']: ' .mysql_error());
    9.  
    10. while($row = mysql_fetch_assoc($result))
    11.     echo '<b>' .$row['tema'] .'</b><br>' .$row['text'];
    12. ?>
    13.  
    Божий дар, даруется с миром.
     
  15. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Ну наконеч-то добили))), спасиб те друг большое!!!
     
  16. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Во имя Господа!
     
  17. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Спасибо, ва за помощь. Я уже сам разобрался. Просто в поле type попадал лишний пробел . :)
    Insert into ....... Values (... '$type ' , ....)
     
  18. SokoL_BY

    SokoL_BY Активный пользователь

    С нами с:
    7 окт 2008
    Сообщения:
    3
    Симпатии:
    0
    Помогите решить мою проблему:
    Вот обращение к базе данных:
    $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

    Заранее огромное спасибо !
     
  19. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    давай с начала. Вдумчиво
     
  20. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    при фетче подсчитай.
     
  21. SokoL_BY

    SokoL_BY Активный пользователь

    С нами с:
    7 окт 2008
    Сообщения:
    3
    Симпатии:
    0
    Есть таблица players:
    id, name, points
    1 name1 8
    2 name2 5
    3 name3 6
    4 name4 10

    Нужно отсортировать по points как DESC и занести в переменную $position номер строки c именем name1.

    Итого должно получиться что $position = 2
     
  22. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    SELECT COUNT(*) FROM tbl WHERE id BETWEEN (SELECT MIN(points) FROM tbl) AND (SELECT MAX(points) FROM tbl) ORDER BY points DESC
     
  23. SokoL_BY

    SokoL_BY Активный пользователь

    С нами с:
    7 окт 2008
    Сообщения:
    3
    Симпатии:
    0
    You have an error in your SQL syntax =(

    p.s. MySQL 3.23.53-max на localhost как root@localhost
     
  24. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва

    select count(*) as cnt from tbl where points>(select points from tbl where name='name1')

    результат будет cnt+1