[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка в запросе
дианитка
помогите, пож-та, правильно сформировать запрос MySQL

нужн объединить две таблицы - темы и пользователи по столбцу уник.идентификатор пользователя при этом чтобы результат - название, логин, дата выводились в отдельной странице при помощи метода GET.

по моему запросу выводит ошибка - запрос неверный


$m = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE id = ".$_GET['id'] );

while($row = mysql_fetch_array($m))
{
echo "<h2>".$row['name'] ."</h2> ";
echo "<p>". $row['description'] ."</p>";
echo "<p>". $row['date'] ."</p>";
echo "<p>". $row['login'] ."</p>";

}






Спустя 2 минуты, 22 секунды (23.04.2011 - 14:56) neadekvat написал(а):
Какая ошибка?
+ Форматируй запрос удобоваримо.
Здесь пункты 1, 2.

Спустя 19 минут, 46 секунд (23.04.2011 - 15:16) дианитка написал(а):
Warning: mysql_fetch_array()/или mysql_fetch_assoc()/mysql_fetch_row(): supplied argument is not a valid MySQL result resource in %script_addres% on line %line_num%

Спустя 2 минуты, 4 секунды (23.04.2011 - 15:18) neadekvat написал(а):
И?

Спустя 4 минуты, 57 секунд (23.04.2011 - 15:23) дианитка написал(а):
Error in SQL
Query was empty

Спустя 2 минуты, 26 секунд (23.04.2011 - 15:25) DeeKeiD написал(а):
$m = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE id = ".$_GET['id'] ) or die(mysql_error());

Спустя 2 минуты, 48 секунд (23.04.2011 - 15:28) дианитка написал(а):
column id in where clause is ambiguous

неоднозначное условие? а как правильно?

Спустя 1 минута, 44 секунды (23.04.2011 - 15:30) DeeKeiD написал(а):
Поле id имеется в обоих столбцах?
Попробуй так :
mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id'] ) or die(mysql_error());

Спустя 4 минуты, 36 секунд (23.04.2011 - 15:34) дианитка написал(а):
да, я пробовала так

$m = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id'] );

ошибки уже нет) но не выводится логин

Спустя 1 минута, 13 секунд (23.04.2011 - 15:35) DeeKeiD написал(а):
А если WHERE subjects.id заменить на WHERE users.id ?

Спустя 6 минут, 55 секунд (23.04.2011 - 15:42) дианитка написал(а):
ошибки не пишет но ничего не выводит

Спустя 9 минут, 26 секунд (23.04.2011 - 15:52) neadekvat написал(а):
Зачем гадать на кофейной гуще? Надо указывать именно ту таблицу, в которой нужно найти это самое id.

Спустя 2 минуты, 2 секунды (23.04.2011 - 15:54) дианитка написал(а):
я указывала - subjects.id все равно просто не выводится ни тема, ни логин, ни дата

Спустя 11 минут, 37 секунд (23.04.2011 - 16:05) neadekvat написал(а):
"SELECT t1.*, t2.* FROM subjects t1 left join users t2 on t1.user_id = t2.id WHERE t1.id = ".$_GET['id']


* выводит только то, что указано в основной таблице.
Если нужна информация из второй - следует это указывать конкретно.

Спустя 10 минут, 39 секунд (23.04.2011 - 16:16) Invis1ble написал(а):
дианитка
попробуй так:
$qSubjects =
"SELECT s.*, u.*
FROM `subjects` s
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'] . "
GROUP BY s.`id`"
;
$rSubjects = mysql_query($qSubjects) or die(mysql_error());
if (mysql_num_rows($rSubjects) > 0)
{
while ($subject = mysql_fetch_assoc($rSubjects))
{
// Вывод данных
}
}

else
echo 'Записей с таким id нет';

Спустя 15 минут, 37 секунд (23.04.2011 - 16:32) neadekvat написал(а):
Invis1ble, зачем GROUP BY s.`id`, если это, по логике, первичный ключ?

Спустя 3 минуты, 16 секунд (23.04.2011 - 16:35) дианитка написал(а):
все равно - ошибки не пишет но и ничего не выдает( с group и без

Спустя 1 минута, 46 секунд (23.04.2011 - 16:37) neadekvat написал(а):
В обоих случаях (и с моим вариантом и с вариантом Инвиза)?

Спустя 14 минут, 22 секунды (23.04.2011 - 16:51) Invis1ble написал(а):
neadekvat
Цитата
зачем GROUP BY s.`id`, если это, по логике, первичный ключ?

чесно говоря не уверен, но вроде как если будет несколько записей в users удовлетворять условию ON, то без GROUP BY будет дублирование данных unsure.gif

Спустя 1 минута, 12 секунд (23.04.2011 - 16:52) Invis1ble написал(а):
дианитка
покажи свой код, где
Цитата
ничего не выдает

полностью

Спустя 5 минут, 37 секунд (23.04.2011 - 16:58) neadekvat написал(а):
Цитата (Invis1ble @ 23.04.2011 - 17:51)
то без GROUP BY будет дублирование данных

Что имеется в виду под "дублированием"? Просто вместо одной строки вернется две или более.
Но связывают обычно по уникальным полям (соответствующим индексам или первичным ключам), чтобы таких ситуаций не было.

Спустя 6 минут, 25 секунд (23.04.2011 - 17:04) Invis1ble написал(а):
neadekvat
не, ну если в ON поле u.`id` - первичный ключ, то да, можно и без группировки. Тогда и цикл while там не к месту. Но я же не экстрасенс, поэтому предусматриваю вариант, что поля не уникальны smile.gif

Спустя 2 минуты, 55 секунд (23.04.2011 - 17:07) дианитка написал(а):

session_start();
include "bd.php";
echo "Привет ".$_SESSION['user'];

if(isset($_POST['submit'])){
$user_id=0;
if (isset($_SESSION['user_id'])){
$user_id = $_SESSION['user_id'];

}

//$m = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id'] );
/*$query = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id']) or die(mysql_error());
while($row = mysql_fetch_array($query))
{
echo "<h2>".$row['name'] ."</h2> ";
echo "<p>". $row['description'] ."</p>";
echo "<p>". $row['date'] ."</p>";
echo "<p>". $row['login'] ."</p>";

}*/



$qSubjects =
"SELECT s.*, u.*
FROM `subjects` s
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'] . "
"
;
$rSubjects = mysql_query($qSubjects) or die(mysql_error());
if (mysql_num_rows($rSubjects) > 0)
{
while ($subject = mysql_fetch_assoc($rSubjects))
{
echo "<h2>".$subject['name'] ."</h2> ";
echo "<p>". $subject['description'] ."</p>";
echo "<p>". $subject['date'] ."</p>";
echo "<p>". $subject['login'] ."</p>";
}
}

else
echo 'Записей с таким id нет';



$subject_id = $_GET['id'];
$comment = $_POST['comment'];


$r = mysql_query ("INSERT INTO comments (subject_id,date,user_id,comment,flag) VALUES('$subject_id',NOW(),'$user_id','$comment','show')");


}





<h1 style="color:red;"> Добавление комментария</h1>

<form
id="myform2" action="" method="post">

<p>
<label>
Текст комментария<br></label>
<textarea
name="comment" type="text" size="25" maxlength="25"></textarea>
</p>




<p>
<input
type="submit" name="submit" value="Отправить комментарий">

</p></form>


Спустя 1 минута, 33 секунды (23.04.2011 - 17:09) neadekvat написал(а):
Invis1ble, в данном случаи твое group by ничего бы не изменило. Вообще, его надо иначе применять. И не применять "на всякий случай".

Спустя 7 минут, 24 секунды (23.04.2011 - 17:16) Invis1ble написал(а):
дианитка
Странно... Ошибок в логике вывода я не вижу.. Попробуй выполнить запрос в phpMyAdmin

neadekvat
ок, как скажешь smile.gif

Спустя 2 минуты, 30 секунд (23.04.2011 - 17:19) neadekvat написал(а):
$qSubjects =
"SELECT s.*, u.*
FROM `subjects` s
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'] . "
"
;
$rSubjects = mysql_query($qSubjects) or die(mysql_error());
if (mysql_num_rows($rSubjects) > 0)
{
while ($subject = mysql_fetch_assoc($rSubjects))
{
echo "<h2>".$subject['name'] ."</h2> ";
echo "<p>". $subject['description'] ."</p>";
echo "<p>". $subject['date'] ."</p>";
echo "<p>". $subject['login'] ."</p>";
}
}

else
echo 'Записей с таким id нет';


Замени для тестирования на это:
$qSubjects =
"SELECT s.*, u.*
FROM `subjects` s
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'];
$rSubjects = mysql_query($qSubjects) or die(mysql_error());
if (mysql_num_rows($rSubjects) > 0)
{
while ($subject = mysql_fetch_assoc($rSubjects))
{
print_r($subject); // добавленная строка
echo "<h2>".$subject['name'] ."</h2> ";
echo "<p>". $subject['description'] ."</p>";
echo "<p>". $subject['date'] ."</p>";
echo "<p>". $subject['login'] ."</p>";
}
}

else
echo 'Записей с таким id нет';

Спустя 45 минут, 12 секунд (23.04.2011 - 18:04) дианитка написал(а):
спасибо огромное всем за помощь,
разобралась в чем была ошибка

Спустя 11 минут, 28 секунд (23.04.2011 - 18:15) Invis1ble написал(а):
дианитка
ну может поделишься, или секрет?

Спустя 13 минут, 11 секунд (23.04.2011 - 18:29) дианитка написал(а):
все оказалось очень просто - я не видела нужных мне записей - описания, дату и т.д т.к.

if(isset($_POST['submit'])){ заканчивается в самом конце - т.е. записи появлялись только когда я записывала новый комментарий.

ну а с логином мне очень помогло

print_r($subject); // добавленная строка


Спустя 11 минут, 53 секунды (23.04.2011 - 18:40) Invis1ble написал(а):
ясно


_____________
дианка[COLOR=purple]
Быстрый ответ:

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