|
|
|
| Всем привет. Пытаюсь понять вложенные запросы.
Пишу код:
<?php
require_once 'db.php';
$sql = "SELECT title,image,url FROM page WHERE url IN
(SELECT login FROM comment)";
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query))
{
$data[$row[id]] = $row;
}
echo "<pre>";
print_r($data);
echo "</pre>";
?>
|
Но я хотел бы помимо логина, вытащить еще другие поля из таблицы comment. Как это сделать? | |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 09:37)
| | Сделал такой запрос:
$sql = "SELECT * FROM page,comment WHERE page.type='user'";
Получается что инфу он собирает, но только пользователи у меня разные. А он инфу о первом из них вытаскивает!
Как сделать, чтобы к каждому комменту скрипт вытаскивал инфу о пользователе который оставил коммент? | |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 09:37)
| | Вы хотите из вложенного запроса передать информацию в основной? Так не получится, в случае вложенных запросов возможна передача информации только из основного запроса во вложенный - это так называемые коррелированные запросы. Если у вас первый случай, вам лучше воспользоваться многотабличным SELECT-запросом. | |
|
|
|
|
|
|
|
для: cheops
(06.09.2012 в 11:45)
| | Мне нужно вытащить комментарий и инфу о пользователе, который его оставил.
На одном форуме мне сказали воспользоваться join.
Вот получился такой код:
$sql = "SELECT comment.text, comment.parent_id, comment.date, page.url, page.title, page.image
FROM comment LEFT JOIN page
ON comment.login=page.url";
|
Но я не могу понять как мне вывести несколько записей. Так как на том форуме, сказали что цикл отправит сервер в далекое странствие. | |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 13:21)
| | Сейчас выводится только одна строка? Если не сложно прикрепите короткий дамп, чтобы можно было воспроизвести ситуацию на сервере и по экспериментировать. | |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 13:21)
| | запрос выполните в phpmyadmin - сколько записей выводит? может у вас проблема с выводом на страницу, а не с выборкой из базы? | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 14:01)
| | Ну я тоже думаю, что проблема с выводом на страницу.
В phpmyadmin выводит 5 записей.
В пхп файле я пишу такой код:
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($query))
{
$data[$row[id]] = $row;
}
echo "<pre>";
print_r($data);
echo "</pre>";
|
| |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 15:36)
| | А разве у Вас есть поле `id`? в запросе Вы его не выбираете...
Наверное нужно : $data[] = $row; ? | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 15:41)
| | Не помогло!
Вот весь код, слегка измененный.
<?php
require_once 'db.php';
$sql = "SELECT comment.id, comment.name, comment.url, comment.date, comment.text, comment.parent_id, comment.date, page.url, page.title, page.image
FROM comment LEFT JOIN page
ON comment.login=page.url WHERE comment.id='50'";
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($query))
{
$data[] = $row;
}
echo "<pre>";
print_r($data);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 15:54)
| | так comment.id это у вас автоинкримент в таблице комментов? тогда и будет возвращать только одну строку. Вы что желаете получить? наверное нужно : WHERE comment.id='50' OR comment.parent_id=50 ? для более точного ответа хотя бы структуру таблиц выложите и поясните связки внутри таблиц и между таблицами... ну и LEFT JOIN пожалуй тут Вам не нужен или у Вас есть комменты без привязки к таблице пользователей? | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 16:06)
| | Это таблица комментариев:
CREATE TABLE IF NOT EXISTS `comment` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`login` varchar(50) NOT NULL,
`text` text NOT NULL,
`url` int(9) NOT NULL,
`date` datetime NOT NULL,
`parent_id` int(9) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=59 ;
|
А это с юзерами:
CREATE TABLE IF NOT EXISTS `page` (
`id` int(2) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`text` text NOT NULL,
`url` varchar(50) NOT NULL,
`type` varchar(50) NOT NULL,
`image` varchar(255) NOT NULL,
`photo` text NOT NULL,
`animal` varchar(255) NOT NULL,
`banner` varchar(255) NOT NULL,
`link` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`status` varchar(255) NOT NULL,
`sait` varchar(255) NOT NULL,
`phone` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`region` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
|
| |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 16:18)
| |
$sql = "SELECT comment.id, comment.name, comment.url, comment.date, comment.text, comment.parent_id, comment.date, page.url, page.title, page.image
FROM comment, page
WHERE comment.login=page.url and comment.id='50' OR comment.parent_id=50";
|
а такой запрос попробуйте - должен сработать | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 16:33)
| | Сработало! Спасибо. Сделал только вот так:
$sql = "SELECT comment.id, comment.name, comment.url, comment.date, comment.text, comment.parent_id, comment.date, page.url, page.title, page.image
FROM comment, page
WHERE comment.login=page.url";
|
| |
|
|
|
|
|
|
|
для: kapitalist
(06.09.2012 в 16:41)
| | да, это если все комменты нужно вывести - там я в скобки забыл взять AND ( .... OR ...) | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 16:43)
| | Ну мне потом нужно будет для каждой страницы свои комменты вывести, но я думаю это не сложно :) | |
|
|
|
|
|
|
|
для: Lotanaen
(06.09.2012 в 15:41)
| | Вот результат:
Array
(
[0] => Array
(
[id] => 50
[name] =>
[url] => kapitalist
[date] => 2012-09-05 21:09:48
[text] => 123
[parent_id] => 0
[title] => Виталий
[image] => me.jpg
)
) | |
|
|
|