Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP, SQL, SSI-Дневник ламера, превращающегося в ГУРУ :-)


Информационный Канал Subscribe.Ru

Выпуск 4.

Здравствуйте товаГисчи :-)
Опять я.
В прошлом выпуске говорил, что команда include не работает во вложенных файлах, это несколько ошибочно, простите :-) Проверил, оказалось, что она не вызывает ДВА зацикленных друг на друга файла, а вот ТРИ... Три уже вызывает, но потом всёравно вываливается ошибка. Тоесть если последовательность вызываемых файлов не замкнута сама на себя, то всё будет нормально.

Недавно возился со сложными запросами к базе SQL. Оказалось, что если делать выборку сразу из НЕСКОЛЬКИХ таблиц, то все параметры надо записывать в виде: имя таблицы . имя поля Тоесть через точку. Даже если вы не получаете в запросе данные из других таблиц, но они используются при внутренних SQL запросах, необходимо прописывать сложный путь, а в целом синтаксис не отличается от обычного запроса вида:

$query="select * from users;"; //запрос по одной таблице
$query="select DISTINCT users.* from users, city where users.idcity <> city.id;"; //запрос по нескольким таблицам
DISTINCT - отрезает по идее дубли, но у меня почему-то не работал так, как надо было просто список пользователей из таблицы users, которые условно говоря не живут ни в одном городе, означеном в таблице city.
Работало по другому, тоесть допустим Владимит Жуков живёт в Ростове и SQL проверяя таблицу пользователей игнорировал итерацию проверки на Ростов, но зато выдавал этого Васю Жукова во всех других случаях, так как поле пользователя idcity не совпадало с id любого города, кроме Ростова. В результате объём информации увеличился в количество пользователей, умноженное на количество городов :-) Хорошо, что база была тестовая.

Пришлось сделать по другому:
$idrow=""; //Просто определяем пустую переменную на будущее, чтоб если она прийдёт в скрипт каким-либо другим методом(Хакеры блин), небыло лишних проблем
$query='select id from section;';
//Выгребаем все ID существующих разделов

$result=mysql_query($query, $db); //Выбираем их из таблицы запросом

while(list($row)=mysql_fetch_row($result)) {$idrow=$idrow."'".$row."', ";} //Складываем в одну сторку через запятую с последующим пробелом гоняя цикл

$len=strlen($idrow); // Определяем длину получившейся строки

$idrow=substr($idrow, 0, $len-2); // Отрезаем ДВА последних символа в строке начиная с нулевой (0) позиции. Количество вырезаемых символов: ($len-2)

$idrow="(".$idrow.")"; //Получившуюся строку заключаем в скобки, как того требует синтаксис запроса к SQL

$query='select * from tovar where idsection not in '.$idrow.' order by title;';

// И вот теперь уже получаем список того, что не подпадает ни под одну категорию(ID номер) другой таблицы. Сортировка по полю TITLE. Если бы мы добавили в конце после title оператор обратной сортировки: DESC, то сортировка была-бы обратной. Логично, да ? :-)
По умолчанию-же стоит сортировка ASC - тоесть по возрастанию.

На сегодня хватит. Досвиданья.
Пишите, если что: IrkutskProject(зверушка)yandex.ru


http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное