[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите правильно составить запрос
MrBrown
Здравствуйте!
Делаю страничку типа словаря разных терминов.
Сваял две таблицы:
Первая - letters, с полями id, letter. Поле letter заполнил буквами русского алфавита;
Вторая - dictionary, с полями id, id_letters, title, text.
Естественно, dictionary.id_letters=letters.id
Хочу, чтобы все буквы выходили в цикле как обычно, но та буква, соответственно которой уже есть инфа в таблице dictionary, была бы ссылкой на файл dict.php
вот что я имею:
<?php 
include './blocks/db.php'; /*Соединяемся с базой*/
$result = mysql_query ("SELECT * FROM `letters`",$db);
$result2 = mysql_query ("SELECT * FROM `dictionary` WHERE `dictionary.id_letters`=`letters.id`",$db);
?>

и далее (ненужное пропустил):
<?php 
echo '<p>';
while($myrow = mysql_fetch_assoc($result))
{
if (!isset ($id_letters))
{
echo $myrow['letter'].'&nbsp&nbsp';
}
else
{
echo '<a href="dict.php?id='.$myrow['id'].'">'.$myrow['letter'].'</a>&nbsp&nbsp';
}
}

echo '</p>';
?>

Буквы все появились, но как ссылки не подчеркиваются. А инфа в таблице есть.
Помогите найти кривизну. Спасибо.
p.s. Если есть возможность вместо двух запросов сформировать один, подскажите как это сделать.



Спустя 18 минут, 5 секунд (22.02.2012 - 11:19) johniek_comp написал(а):
<?php 
include './blocks/db.php'; /*Соединяемся с базой*/
$result = mysql_query ("SELECT * FROM `letters`",$db);
$result2 = mysql_query ("SELECT * FROM `dictionary` WHERE `dictionary.id_letters`=`letters.id`",$db);
echo '<p>';
while($myrow = mysql_fetch_assoc($result2))
{
if (empty($id_letters))
{
echo $myrow['letter'].'&nbsp&nbsp';
}
else
{
echo '<a href="dict.php?id='.$myrow['id'].'">'.$myrow['letter'].'</a>&nbsp&nbsp';
}
}

echo '</p>';
?>



А Попов тебе разве не научил культуре написания кода? Не понятно же где цикл кончается если не всматриваться :blink:

Спустя 22 минуты, 26 секунд (22.02.2012 - 11:41) MrBrown написал(а):
Про Попова уже было сказано много в других темах и реабилитационных уроках. С вашего позволения, я просил бы вас - ближе к теме поста. Буду признателен, если кое-что в моем коде "поповское" поправите. Я, хотя и прошел курсы реабилитации (видите же - никаких "bd.php", никаких do-while, никаких printf, сплошные echo ну и т.д.), тем не менее многого еще не понимаю. Прошу помощи, а не "шпилек" в мой адрес, тем более, что я их не заслуживаю, как не заслуживают все, кому по жизни довелось прежде познакомиться с курсами Попова, а только затем попасть на ваш сайт. Спасибо.
p.s. А переучиваться и вправду тяжелее, чем учиться с нуля: много мусора засело в памяти.
p.p.s Ваш код ничего не меняет, увы.

Спустя 1 час, 3 минуты, 51 секунда (22.02.2012 - 12:45) Kuliev написал(а):
Если не ошибаюсь, то можно было написать так



$sql = "SELECT * FROM
`dictionary`
WHERE `id_letters`
IN(SELECT `id_letters` FROM `letters`)"
;

$result = mysql_query($sql) or die(mysql_error() .'<br>.' $sql);


Как то так.

Спустя 37 минут, 35 секунд (22.02.2012 - 13:23) MrBrown написал(а):
Спасибо за код запроса (я его чуть поправил):
 $sql = "SELECT * FROM 
`letters`, `dictionary`
WHERE `id_letters`
IN(SELECT `id` FROM `letters`)";

$result = mysql_query($sql) or die(mysql_error() .'<br>'. $sql);

но он тоже не дает нужного результата - чтобы несколько букв, на которые в таблице dictionary существуют записи, были бы подчеркнутыми ссылками.

Спустя 6 минут, 50 секунд (22.02.2012 - 13:30) m4a1fox написал(а):
johniek_comp
Цитата
А Попов тебе разве не научил культуре написания кода?

А ты видел курсы Е.Попова???? Где там культура?

Спустя 1 минута, 31 секунда (22.02.2012 - 13:31) m4a1fox написал(а):
MrBrown
Цитата
но как ссылки не подчеркиваются

А по ссылкам перейти можно?

Спустя 11 минут, 12 секунд (22.02.2012 - 13:42) MrBrown написал(а):
Друзья мои! m4a1fox, а также johniek_comp! Уж если вам так хочется поговорить о культуре, то вот моё к вам обращение:

Премилостивые государи! А не соизволите ли соблаговолить обратить свои очи ясные на челом бьющего в ноги недостойного слугу Вашего - автора сего поста, - и, преисполнившись к нему милосердия, вникнуть в его нижайшую челобитную и разрешить его проблему, прекратив оффтопить.

Речь в топике не о Попове. Помогите подчеркнуть "букафки" в списке.

m4a1fox, буквы, которые должны быть ссылками, не подчеркиваются. Когда меняю на
if (!empty($id_letters)) - то есть добавляю воскл. энак, то все буквы становятся ссылками.

Спустя 5 минут, 10 секунд (22.02.2012 - 13:48) Placido написал(а):
SELECT `l`.`id`, `l`.`letter`, COUNT(`d`.`id`) AS `words`
FROM `letters` `l` LEFT JOIN `dictionary` `d`
ON `l`.`id` = `d`.`letters_id`
GROUP BY `l`.`id`
ORDER BY `l`.`letter`;


При выводе проверяйте,

if ($myrow['words'] > 0)
{
echo '<a href="dict.php?id='.$myrow['id'].'">'.$myrow['letter'].'</a>';
}
else
{
echo $myrow['letter'];
}

Спустя 15 минут, 20 секунд (22.02.2012 - 14:03) m4a1fox написал(а):
MrBrown
Цитата

Премилостивые государи! А не соизволите ли соблаговолить обратить свои очи ясные на челом бьющего в ноги недостойного слугу Вашего - автора сего поста, - и, преисполнившись к нему милосердия, вникнуть в его нижайшую челобитную и разрешить его проблему, прекратив оффтопить.

Это не культура, а насмешка.... а культура кода важна, может вы еще этого не понимаете, но в дальнейшем поймете....

Спустя 9 минут, 2 секунды (22.02.2012 - 14:12) m4a1fox написал(а):
MrBrown
Цитата
if (!empty($id_letters)) - то есть добавляю воскл. энак, то все буквы становятся ссылками.

А вы знаете, что означает воскл. знак?

Спустя 6 минут, 45 секунд (22.02.2012 - 14:19) MrBrown написал(а):
Воскл. знак? Конечно знаю! (респект Попову, обучил. Гы-гы) smile.gif
Блин, хоть застрелите меня вон тем автоматом, с аватарки, нифига не догоню код Placido!

Спустя 5 минут, 52 секунды (22.02.2012 - 14:25) Placido написал(а):
А чего догонять? Объединяем две таблицы по LEFT JOIN. Если в правой таблице (словарь) нет слов на какую-то букву, то в результате в поле words будет 0 (COUNT(`количество id слов на определенную букву`) + GROUP BY `id буквы`), если есть - то там будет количество слов на эту букву. При выводе, если есть слова, то рисуем ссылку, если нет, то пишем просто букву.

Спустя 39 минут, 23 секунды (22.02.2012 - 15:04) MrBrown написал(а):
Placido, спасибо, буду разбираться. Получается, мне надо дополнительное поле `words` делать? У меня в таблице уже есть поля:
id, id_letters, title (типа "слово", "заголовок"), text (типа разъяснение слова из поля `title`). Думаю, можно заменить `words` на `title`, правильно?

Спустя 34 минуты, 43 секунды (22.02.2012 - 15:39) Placido написал(а):
Вы мой запрос пробовали запустить?
Никакого дополнительного поля не требуется. Оно создается динамически в запросе (COUNT(`d`.`id`) AS `words`) - туда выбирается из таблицы dictionary количество записей, соответствующих определенной букве.

Спустя 3 минуты, 25 секунд (22.02.2012 - 15:42) MrBrown написал(а):
Placido, не работает. Вполне допускаю кривизну своих рук, тем не менее, ищу ошибку.
LEFT JOIN `dictionary` `d` - возможно LEFT JOIN `dictionary`.`id`?
И еще: FROM `letters` `l` - возможно FROM `letters`, `dictionary`?

Спустя 6 минут, 38 секунд (22.02.2012 - 15:49) Placido написал(а):
Нет, там все правильно. Какая ошибка?

Спустя 7 минут, 53 секунды (22.02.2012 - 15:57) MrBrown написал(а):
А я правильно делаю, что ваш код раскрываю, типа `l` - `letters`, а `d` - `dictionary`?
Ошибка - пишет, что нет то одного поля, то вообще таблицы такой нет.

Спустя 31 минута, 41 секунда (22.02.2012 - 16:28) Placido написал(а):
Мой запрос нужно запускать "как есть". Ничего не изменяя. `d` - это псевдоним таблицы `dictionary`, а `l` - таблицы `letters`.

Спустя 45 минут, 54 секунды (22.02.2012 - 17:14) MrBrown написал(а):
Вот что получается при вставке "как есть":
Unknown column 'd.letters_id' in 'on clause'
SELECT `l`.`id`, `l`.`letter`, COUNT(`d`.`id`) AS `words` FROM `letters` `l` LEFT JOIN `dictionary` `d` ON `l`.`id` = `d`.`letters_id` GROUP BY `l`.`id` ORDER BY `l`.`letter`;

Спустя 2 минуты, 52 секунды (22.02.2012 - 17:17) Placido написал(а):
В запросе letters_id измените на id_letters.

Спустя 15 минут, 54 секунды (22.02.2012 - 17:33) MrBrown написал(а):
Ё! Получилось. Работает! Ну, я тут "ваще ничё не панимаю".
Спасибо огромное, пошёл разбирать код.
p.s. Про псевдонимы впервые узнал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.