Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

07.06.2009, 23:38
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Сообщение от Vanofuture
FireFenix, спс всё пашет. В продолжение темы:
Нужно извлечь записи из таблицы xxx, при этом если в таблице yyy есть запись у которой поле xxx.`id`=`yyy`.`cur_id` то эти данные также должны появится в результате, а если их нету то запрос все равно будет выполнен. Я пытался сделать что-то вроде, но не получилось:
Код:
SELECT * FROM `xxx` IF EXISTS(SELECT * FROM `yyy` WHERE `xxx`.`id`=`yyy`.`my_id`);
Как всегда всё запутанно и сложно
На этот случай есть LEFT JOIN
Код:
SELECT * FROM xxx LEFT JOIN yyy ON yyy.my_id=xxx.id
Тогда ты получишь таблицу - состоящую из столбцов 2х таблиц
Для наглядности и понимания советую посмотреть - http://www.codinghorror.com/blog/archives/000976.html
|
|
|

10.06.2009, 17:54
|
|
Познающий
Регистрация: 01.08.2006
Сообщений: 35
Провел на форуме: 94171
Репутация:
3
|
|
Есть таблица с колонкой date (тип varchar), в ней содержится timestamp, как вывести например записи с датой 2009-01-04?
Спасибо.
|
|
|

10.06.2009, 18:08
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Сообщение от [R]eD
Есть таблица с колонкой date (тип varchar), в ней содержится timestamp, как вывести например записи с датой 2009-01-04?
Спасибо.
Код:
SELECT FROM_UNIXTIME(data_field);
Код:
mysql> SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19'
mysql> SELECT FROM_UNIXTIME(1196440219) + 0;
-> 20071130103019.000000
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
-> '2007 30th November 10:30:59 2007'
Код:
SELECT * FROM table WHERE FROM_UNIXTIME(data_field) = '2009-01-04';
Последний раз редактировалось FireFenix; 10.06.2009 в 18:40..
|
|
|

10.06.2009, 18:29
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Код:
select * from mytable where date(`date`) = '2009-01-04';
|
|
|

11.06.2009, 00:30
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Собственно, думаю сюда пишу,правильно =)
В общем,есть в базе новости,которые постоянно добавляються.
При выводе их,таким образом:
PHP код:
$query = mysql_query("SELECT * FROM news");
while ($row = mysql_fetch_assoc($query)) {
if (strlen($row['body']) <= 780) {
$mini_news = $row['body'];
$read_full = '';
} else {
$mini_news = substr($row['body'], 0, 780);
$read_full = '...<a href="news.php?id=' . $row['id'] . '">Далее</a>';
}
$result .= '<div id="news"><name>' . $row['subject'] . '</name>
<table width="0" border="0" cellpadding="0" cellspacing="0">
<tr><td><img src="file/img/' . $row['path_img'] . '"></td><td id="text">' . $mini_news .
$read_full . '</td></table>
</div>';
}
Это отрывок функции,которая возвращает $result;
ТАк вот,новости выводяться задом наперед,тоесть,те что были добавленуц только что - внизу,а те что давно - наверху.
Каким образом изминить положение вещей?
|
|
|

11.06.2009, 00:36
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Сообщение от m0Hze
ТАк вот,новости выводяться задом наперед,тоесть,те что были добавленуц только что - внизу,а те что давно - наверху.
Каким образом изминить положение вещей?
Код:
$query = mysql_query("SELECT * FROM news ORDER BY id DESC");
ASC - обычный порядок
DESC - обратный порядок
|
|
|

11.06.2009, 02:50
|
|
Познающий
Регистрация: 24.04.2008
Сообщений: 34
Провел на форуме: 148656
Репутация:
28
|
|
Как для каждой записи в таблице xxx создать запись в таблице yyy?
|
|
|

11.06.2009, 09:15
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Код:
INSERT INTO yyy (name, id_xxx) SELECT "Я название" as "name", id FROM xxx;
Код:
SELECT * FROM xxx;
... Получаем нужные данные...
INSERT INTO yyy SET столбец="полученные данные";
Вообще нужно уточнить задачу. Там есть много способов.
|
|
|

11.06.2009, 16:40
|
|
Познающий
Регистрация: 24.04.2008
Сообщений: 34
Провел на форуме: 148656
Репутация:
28
|
|
Сообщение от FireFenix
Вообще нужно уточнить задачу. Там есть много способов.
Даже не знаю, что там может быть особенного.
Нужно для каждой записи из таблицы xxx создать запись в таблице yyy, при это надо заменить часть дефолтного текста одним полем из xxx. Мой набросок:
Код:
SELECT `name` FROM `xxx`;
INSERT INTO yyy VALUES(NULL, ( REPLACE(somedata, '%username%', `xxx`.`name`) ) );
|
|
|

11.06.2009, 19:09
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
INSERT INTO yyy (name, id_xxx) SELECT "Я название" as "name", id FROM xxx;
вот используй
в SELECT указываешь поля которые будут выбираться из ххх и измённое поле как "поле as имя_поля"
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|