|
|
|
| необходимо сделать выборку из двух таблиц, но дело в том, что нет ни одного общего столбца
$result = mysql_query ("SELECT id, title, date FROM table1
WHERE table1.date, table2.date>'$date_begin' AND table1.date, table2.date < '$date_end' ORDER by table1.date, table2.date DESC", $db);
|
| |
|
|
|
|
|
|
|
для: franko
(12.03.2011 в 23:08)
| | А что сделать хотите? Почему нельзя просто выполнить два запроса? | |
|
|
|
|
|
|
|
для: cheops
(12.03.2011 в 23:41)
| | http://11klassniki.ru/index.php справа есть АРХИВ НОМЕРОВ.
там я хочу вывести статьи из двух таблиц "Новые статьи" и "Про ЕГЭ"
поэтому делаю общий запрос | |
|
|
|
|
|
|
|
для: franko
(12.03.2011 в 23:54)
| | Т.е. они никак не связаны? Наверное будет удобнее осуществить два отдельных запроса или, если у них одинаковая структура, не объединить эти таблицы при помощи оператора UNION
SELECT id, title, date FROM table1
UNION
SELECT id, title, date FROM table2
|
| |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 00:03)
| | хорошо. а как быть
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
do
{
printf ("<a href='view_post.php?id=%s'>
|
есть view_post.php и view_post_ege.php | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 00:19)
| | >есть view_post.php и view_post_ege.php
Чем они отличаются и какую несут ответственность? Они выводят списки ссылок из разных таблиц или здесь дело в чем-то другом? | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 00:21)
| | view_post.php отражает данные из одной табл.
а view_post_ege.php - из другой
Они выводят списки ссылок из разных таблиц | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 00:24)
| | Хм... т.е. и запросы находятся в этих файлах? Тогда не понимаю, почему нужно эти запросы объединять? Помоему наоборот их удобно выполнять раздельно (даже сопровождать будет удобнее при меньшем количестве связей)? | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 01:10)
| | если сделать два запроса, тогда
$result = mysql_query ("SELECT id, title, date FROM table1
WHERE date>'$date_begin' AND date < '$date_end' ORDER by date DESC", $db);
$result = mysql_query ("SELECT id, title, date FROM table2
WHERE date>'$date_begin' AND date < '$date_end' ORDER by date DESC", $db);
|
это работает, естественно.
но вопрос в том чтобы выводить по ДАТЕ эти статьи из двух таблиц. а сейчас получается, что в начале выводятся статьи из TABLE 1, а потом из TABLE2 | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 10:21)
| | Ясно, тогда вам должен подойти UNION
SELECT id, title, date FROM table1
WHERE date>'$date_begin' AND date < '$date_end'
UNION
SELECT id, title, date FROM table2
WHERE date>'$date_begin' AND date < '$date_end'
ORDER by date DESC
|
PS Вместо view_post.php и view_post_ege.php создавайте один файл с одним обработчиком запроса. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 11:46)
| | вот создал http://11klassniki.ru/view_year.php?id=150
проблема в том что если верхние ссылки соответствуют содержимому, то нижние ссылки выводят неверный текст
$result = mysql_query("SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, text, cat from table1 WHERE id='$id'
UNION
SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, text, ege from table2 WHERE id='$id'", $db);
|
| |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 13:37)
| | >вот создал http://11klassniki.ru/view_year.php?id=150
Куда смотреть?
>проблема в том что если верхние ссылки соответствуют содержимому, то нижние ссылки >выводят неверный текст
Имейте в виду, что столбца ege не будет, его значения будут находиться в cat, при UNION-объединении столбцы называются по именам первой таблицы. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 14:04)
| | вернее лучше смотреть сюда http://11klassniki.ru/view_date.php?date=2011-
Имейте в виду, что столбца ege не будет, его значения будут находиться в cat, при UNION-объединении столбцы называются по именам первой таблицы.
так ege нет в первой таблице, как нет cat во второй | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 16:10)
| | Имеется в виду, что при объединении будет только столбец cat, в котором будут значения из ege. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 16:37)
| | тогда получается нужно создавать еще одну общую переменную вместо cat и ege? Иначе идет путаница. вместо ege подставляется cat и выводится другая статья | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 16:51)
| | Да, если от этого зависит логика вывода, нужно вводить еще статический столбец, с признаком, из какой таблицы берутся данные
SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, text, cat, 'fst' AS tbl
from table1
WHERE id='$id'
UNION
SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, text, ege, 'snd'
from table2
WHERE id='$id'
|
| |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 18:26)
| | какой тип данных нужно присвить столбцам fst' и 'snd' | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 19:41)
| | А их вообще создавать не нужно, просто добавьте строки в SELECT-запрос (как это показано выше) и у вас будет динамический столбец, который в реальных таблицах не существует, но в результирующей таблице он будет присутствовать. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 19:47)
| | добавил как написали.
если взглянуть на http://11klassniki.ru/view_date.php?date=2011- то только две нижние ссылки не верно ссылаются. | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 21:52)
| | SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, text, cat, 'fst' AS tbl
from table1
'fst' AS tbl или 'fst' AS table1 | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 22:01)
| | Это просто название столбца, чтобы было потом удобнее ссылаться из результирующего массива - можно любое, кроме уже занятых, подставить. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 22:15)
| | но работает не верно. | |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 22:23)
| | А как нужно чтобы ссылалось? Мне логика скрипта не видна, так как у меня этого скрипта нет. По идеи основываясь на этом последнем столбце вы должны принимать решение как выводить данные из той или иной таблицы. Вы как это делаете? | |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 22:31)
| | здесь мы выводим ссылки
$result = mysql_query("SELECT id, title, date FROM table1 WHERE date >'$date_begin' AND date < '$date_end'
UNION
SELECT id, title, date FROM table2 WHERE date >'$date_begin' AND date < '$date_end'
ORDER by date DESC", $db);
|
printf ("<div class='content3'><a href='view_year.php?id=%s'>
файл 'view_year.php
а здесь выводим страницы
$result = mysql_query("SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat, 'fst' AS tbl from table1 WHERE id='$id'
UNION
SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, ege, 'snd' from table2 WHERE id='$id'", $db);
|
| |
|
|
|
|
|
|
|
для: franko
(13.03.2011 в 23:02)
| | >здесь мы выводим ссылки
Вот как раз тут и нужно бы флаг-признак поставить
$result = mysql_query("SELECT id, title, date, 'fst' AS tbl FROM table1 WHERE date >'$date_begin' AND date < '$date_end'
UNION
SELECT id, title, date, 'snd' FROM table2 WHERE date >'$date_begin' AND date < '$date_end'
ORDER by date DESC", $db);
|
И передать его через GET-параметр
printf ("<div class='content3'><a href='view_year.php?id=%s&tbl=%s'>
А в файле 'view_year.php уже не осуществлять запрос к двум таблицам, а к конкретной, которая будет определяться вторым GET-параметром tbl
<?php
if($_GET['tbl'] == "fst") $table = "table1";
else $table = "table2";
...
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat
from $table WHERE id='$id';
$result = mysql_query();
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.03.2011 в 23:16)
| | 'view_year.php?id=%s&tbl=%s' - здесь все верно? | |
|
|
|
|
|
|
|
для: franko
(14.03.2011 в 00:13)
| | Да, нужно передать два параметр - id и tbl. Соотстветственно у printf() тоже будет два параметра. Символ амперсанда & всегда лучше записыать в HTML-нотации & - сильно себе съэкономите времени в дальнейшем, при работе с RSS/XML или если потребуется создать валидный XHTML. | |
|
|
|
|
|
|
|
для: franko
(14.03.2011 в 00:13)
| | так ошибку дает. | |
|
|
|
|
|
|
|
для: franko
(14.03.2011 в 17:25)
| | 1) Как выглядит сообщение об ошибке?
2) Как выглядит вызов функции sprintf() от первого символа до последнего ;? | |
|
|
|
|
|
|
|
для: cheops
(14.03.2011 в 20:14)
| | БЫЛО:
{
printf ("<div class='content3'><a href='view_year.php?id=%s'><p>%s</p></a>
", $myrow["id"], $myrow["title"]);
}
|
ПРЕДЛАГАЕТСЯ:
{
printf ("<div class='content3'><a href='view_year.php?id=%s&tbl=%s'><p>%s</p></a>
", $myrow["id"], $myrow["title"]);
}
|
ОШИБКА:
Warning: printf() [function.printf]: Too few arguments in ..view_date.php on line 90
Что добавить в строку ", $myrow["id"], ... $myrow["title"]); | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 11:31)
| | Вам теперь три аргумента передавать нужно
{
printf ("<div class='content3'><a href='view_year.php?id=%s&tbl=%s'><p>%s</p></a>",
$myrow["id"], $myrow["tbl"], $myrow["title"]);
}
|
| |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 11:38)
| | теперь файл /view_year.php
if($_GET['tbl'] == "fst") $table = "table1";
else $table = "table2";
$result = mysql_query("SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat from $tabl WHERE id='$id'", $db);
|
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='151'' at line 1 | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 12:28)
| | Вместо $tabl в SQL-запросе нужно написать $table. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 12:47)
| | теперь
Unknown column 'cat' in 'field list'
видимо в table2 cat отсутствует | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 12:54)
| | А столбец cat в обеих таблицах присутствует? | |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 13:03)
| | только в одной таблице саt
a в другой table - ege | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 13:08)
| | Тогда лучше переделать код следующим образом
<?php
...
if($_GET['tbl'] == "fst")
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat
FROM table1 WHERE id='$id'"
}
else
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, ege AS cat
FROM table2 WHERE id='$id'"
}
$result = mysql_query($query, $db);
...
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 13:11)
| |
if($_GET['tbl'] == "fst")
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat from table1 WHERE id='$id'"
}
else
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, ege AS cat from table2 WHERE id='$id'"
}
$result = mysql_query($query, $db);
if (!$result)
|
Parse error: syntax error, unexpected '}' in ...view_year.php on line 6 | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 13:26)
| | Есть такое дело, точки с запятой забыл.
if($_GET['tbl'] == "fst")
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, cat from table1 WHERE id='$id'";
}
else
{
$query = "SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date, title, ege AS cat from table2 WHERE id='$id'";
}
$result = mysql_query($query, $db);
if (!$result)
|
| |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 13:27)
| | Работает! Спасибо.
в заключение. раньше было защита.
if (isset ($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id=1;}
/* Проверяем, является ли переменная числом */
if (!preg_match("|^[\d]+$|", $id)) {
exit ("<p>Неверный формат запроса! Проверьте URL!");
|
теперь как написать для | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 13:34)
| | Можно оставить без изменений, так как у нас GET-параметр tbl сравнивается со строкой в операторе if, т.е. даже если будет введено что-то другое, логика не пострадает и ошибок это не вызовет. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 13:44)
| | я имел ввиду как защитить сайт, если кто-то захочет в tbl прописать какой-нибудь код или команду | |
|
|
|
|
|
|
|
для: franko
(15.03.2011 в 22:19)
| | Это команда никогда не будет выполнена. Все, что будет введено сравниться со строкой "fst" и после того, как не будет найдено соответствия будет выполняться код в else. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2011 в 22:26)
| | Спасибо cheops.
Тема можно закрывать | |
|
|
|