Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка с условием
 
 автор: Лена   (18.02.2009 в 23:31)   письмо автору
2.5 Кб
 
 

На странице алфавит. При клике на букву появляется список авторов на эту букву. Дальше при клике на автора появляется табличка со списком его книг. Ниже таблички хочу вывести список других авторов на эту же букву.
Скрипт в аттаче.
В 69 строке есть переменная $alike_letter. Как ее можно определить? Как запомнить букву, на которую начинается фамилия текущего автора?

  Ответить  
 
 автор: Trianon   (18.02.2009 в 23:45)   письмо автору
 
   для: Лена   (18.02.2009 в 23:31)
 

вот это как - специально?
if(isset($_GET['author'])){
$author  = intval($_GET['author']);


а это?

$sql = "SELECT * FROM author
...
        print "<a href = '?author=$row[0]'>" . $row[1] . "</a><br>";


-----
В цикле $row['name'] у Вас, вероятно, содержит имя. Первую букву взять труда не составляет. Прямо в цикле и взять.
И таки да. JOIN - правый , а не левый.

  Ответить  
 
 автор: Лена   (19.02.2009 в 17:43)   письмо автору
 
   для: Trianon   (18.02.2009 в 23:45)
 

Правый JOIN сделала. Там действительно, если у автора не будет книг то его имя при левом JOIN в результат запроса не попадет. Цикл еще один добавила, чтобы имя автора один раз выводилось. И букву первую вытянула.

<?php
        
if(isset($_GET['author'])){
        
//если получен айдишник автора, выбираем все книги этого автора
        
$author  intval($_GET['author']);
        
$sql "SELECT *, b.id as d
        FROM books as b RIGHT JOIN author as a 
        ON b.id_author=a.id WHERE b.id_author =" 
$author;
        
$res mysql_query($sql);
        if(!
$res) exit ("Error in $sql:" mysql_error());
        
//-----------вот это все должно пойти в шаблон -----------
        
echo "<table border = '1px'>";
        for(
$i=0;$row mysql_fetch_assoc($res);){
        if(
$i!=$row['id_author']){
        
$i $row['id_author'];
        
//первая буква
        
$alike_letter =  $row['name'][0];
        
//автор
        
echo "<h1>" $row['name'] . "<h1>";
        
//все книги автора
        
echo "<tr><th>Название книги</th>
            <th>Размер</th>
            <th>Тип файла</th>
            <th>Дата добавления</th>
            <th>Число закачек</th>
            <th>&nbsp;&nbsp;&nbsp;&nbsp;</th>
        </tr>"
;
        }
//if($i!
        
echo "
        <tr><td>" 
$row['title']. "</td>
            <td>" 
$row['size']. "</td>
            <td>" 
$row['type']. "</td>
            <td>" 
$row['add_date']. "</td>
            <td>" 
$row['count_download']. "</td>
            <td><a href = 'header.php?id_book=" 
$row['d'] . "'>Скачать</a></td>
        </tr>"
;
        
        }
        echo 
"</table>";
?>


А вот это
>вот это как - специально?
не пойму, что вы хотите. Получаю гет-параметр, присваиваю его значение переменной.

  Ответить  
 
 автор: Trianon   (19.02.2009 в 18:48)   письмо автору
 
   для: Лена   (19.02.2009 в 17:43)
 

Я хочу, чтобы текст можно было читать.
И если стоит if (...) {
то операторы, попадающие под условие, нужно записывать со сдвигом относительно if

насчет строк $sql = "SELECT * FROM author
print "<a href = '?author=$row[0]'>" . $row[1] . "</a><br>";
первая означает выбор всех полей таблицы author в порядке, заданном структурой таблицы.
вторая указывает на обращение к первому и второму полям набора строк результата.
К каким полям? Как это читать?

  Ответить  
 
 автор: Лена   (19.02.2009 в 20:36)   письмо автору
 
   для: Trianon   (19.02.2009 в 18:48)
 

Не злитесь, в следующий раз исправлюсь. А насчет $row[0] - мне-то все понятно, откуда все берется, поэтому даже над этим не задумалась, я не специально. Спасибо, что помогли.

  Ответить  
 
 автор: BinLaden   (18.02.2009 в 23:49)   письмо автору
 
   для: Лена   (18.02.2009 в 23:31)
 

Посмотрел в код и не понял зачем вот это:
<?php

$sql 
"SELECT *, b.id as d
        FROM books as b LEFT JOIN author as a 
        ON a.id = b.id_author WHERE b.id_author =" 
$author;

?>

Вы же выводите список книг для конкретного автора, то есть после получения authour_id из $_GET, Вам надо выполнить 1 запрос к таблице авторов и получить его данные (имя, ...), а уж потом простой (немноготабличный) запрос к таблице книг.

Получается же, что Вы выведете имя автора столько раз, сколько у него находится книг в базе:
<?php
    
while($row mysql_fetch_assoc($res)){
    
//автор
    
echo "<h1>" $row['name'] . "<h1>";
?>


Я не из вредности это заметил. Просто Вам нужно достать первую букву так:
<?php
$alike_letter 
$author_name[0];
?>

Но у Вас имя автора находится $row['name'] и не факт, что эта переменная будет определена, так как книг у автора может и не быть.

UPD: Вообще говоря, $row после цикла всегда будет false

  Ответить  
 
 автор: Лена   (19.02.2009 в 17:44)   письмо автору
2.7 Кб
 
   для: BinLaden   (18.02.2009 в 23:49)
 

По вашему варианту тоже переделала. См. в аттач. Спасибо за помощь.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования