Вам достаточно сделать JOIN, после чего правильно выводить данные в PHP
Запрос который вы написали отличается от моего только ORDER BY - его я тоже добавил но результат не изменился...
Можно подробнее про "правильный" вывод в PHP? Я сначала вывожу родительское меню а потом дочернее вроде бы все правильно... Или может вы имели ввиду что в php есть специальная функция для работы с массивами которая удаляет дубли? Если да, то подскажите пожалуйста, какая это функция
А не, про функцию я ляпнул...ведь mysqli возвращает объект
$result=$db->query("SELECT DISTINCT parentmenu.name, submenu.sub_name FROM parentmenu INNER JOIN submenu ON `submenu`.parentid = `parentmenu`.id") or die($db->error);
while($row=$result->fetch_assoc())
{
echo$row['name']."<br />";
echo$row['sub_name'];
}
Тоесть я говорю в запросе, выбери мне родительское меню, дочернее меню(подменю) из таблицы, которое содержит родительское меню объединяя его с подменю на основе того, что родительский id у подменю, развен id у основного меню. Как то так.
Проблема в том, что родительское меню при выводе ДУБЛИРУЕТСЯ. Я же написал DISTINCT - а он должен прекращать дублирование. Скажите пожалуйста, почему так?
DelphinPRO
Точно ) я просто аякс начал изучать на днях, он показался мне каким то особенным ) Да и когда изучал его, в материалах явно было указано POST что бы отправить данные, а GET что бы забрать. Из за этого я думал что придется писать POST запрос отдельно, а GET отдельно...
А тут вдруг я пишу POST, а данные почему то летят обратно.. Вот в чем была проблема ) Я просто не до конца понимал почему именно он работает )) Ну теперь уже вопросов нет ) Благодарю за внимание! в ближайшее время изменю вашу карму ))
Отвечать так отвечает, но вот не было понятно, почему именно...
По поводу основного принципа: если допустим мы что то добавляем в БД(другая тема) и выводим, то нам нужен селект и инсерт. А не один инсерт который отдаст нам и селект автоматически, ведь так? Поэтому было не очень понятно )
EuGen
EuGen пишет:
Возможно, недопонимание состоит из-за использования метода POST.
Вы верно заметили, я даже намекнул на это в начале темы. Я просто думал что если не написать именно GET, сервер ничего не ответит а только обработает то, что ему прислали, например уложит данные в базу. Спасибо
Как вы заметили, я отправляю AJAX запрос для обработки данных на сервере методом POST. Но как получается, что в то же время срабатывает GET и я получаю результат обработки данных сервером? Я же не писал в req.send что хочу получить данные и не указывал метод GET. Как получается, что данные все равно послушно выводятся в виде результата? Тоесть выводится не только ответ сервера по обработке того запроса, что я посылаю методом POST, но ещё и другой текст(Hello world), который выводится в серверном файле? Вот это не понимаю. Просьба помочь мне разобраться
dalek
Приблизительный алгоритм вы сами уже описали в теме топика. Если вам знакомы базовые конструкции языка PHP и вы хоть немного можете использовать БД в связке с PHP, то без проблем реализуете то, что вам нужно.
Если нет, то даже паблик вам вряд ли поможет т.к его все равно придется адаптировать под ваши нужды(поменять название колонок в БД и другие моменты в зависимости от реализации паблика и ваших нужд)
Врядли кто то напишет вам полноценный скрипт бесплатно или найдется паблик с волшебными настройками которые вам нужны. Все исходит от того, что те кто могут это реализовать состоявшиеся или почти состоявшиеся разработчики. А отсюда следует, что такие люди обычно очень ленивые или просто заняты, это факт Ладно бы там был вопрос из разряда "Как сравнить ключ из БД в тем что ввел пользователь" - это одно, вам бы сразу ответили скорее всего.
Если у вас есть какие либо конкретные вопросы программного направления в реализации данного скрипта то лучше задайте их прямо - так гораздо проще будет понять в чем именно заключается ваша проблема.
П:С данным постом я не хотел никак задеть ваше мировозрение, а лишь объяснил более подробно то, что остальные пользователи хотели сказать выше.
DelphinPRO
Да, но сервер я как поняли и без обращений пашет:
DeepVarvar пишет:
Листен канал сервера крутится в цикле
Или стоп... Может я не совсем правильно понял.
Вот итоговое заключение и поправьте плз кто нибудь если я ошибаюсь:
Цикл запускается только тогда, когда кто то "пнул" серверный файл и если кто то его "пнул", то запускается цикл и отдается ответ от сервера. Если уж не пнули, тогда цикл не запускается и сервер "отдыхает" <- так? (Добавление)
Всё, тему можно закрыть. Мое непонимание некоторых моментов разрешаю списать на шею ошибок молодости ))
Там реализация немного другая ) Я отписал для DelpinPRO про то что не понял из ссылки, не более ) Вот тут эти шмопы ) http://pastebin[dot]com/af8hF88J
DeepVarvar пишет:
Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.
Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не? Без дополнительного усердствия
Спасибо за ссылку, прочитал, идею понял, только в том классе где описано как создать long polling не очень хорошо понял алгоритм, из за отсутствия практики в применении функций shmop_*
Надо будет попрактиковаться в их использовании, потом может применю этот вариант...
А точнее не понял определение понятия "разделяемая память" в описании shmop_* функций
LIME
Вау, комплименты
LIME пишет:
перво наперво как ты решишь кеширование на клиенте...и это верхушка айсберга
Кеширование я при получении данных аяксом запрещаю, потому что если этого не сделать, IE тупо закеширует первый ответ сервера и уже новые сообщения подгружаться не будут...
armancho7777777
Благодарю, наверное это самый оптимальный для меня вариант в данном случае. Вот только почему именно json? Я делаю приблизительно вот так:
Создаю один output файл, в который аяксом подгружаются данные из БД(из второго файла server.php) а потом просто вывожу эти данные при помощи obj.responseText;
В принципе здесь нет никаких сложных данных что бы использовать json, или обязательно json-ом? Насколько я знаю он нужен для сложных данных, что бы можно было удобно вывести данные в разных частях страницы типа $obj->value; или как то разделить при выводе полученный результат. А тут мне нужно вывести просто текст пришедший из БД в одну точку.
LIME
Честно говоря не очень понял... Вот у нас есть допустим записи в гостевой книге, которые берутся из БД. Записи:
Вася:
Message: Hello, world!
Петя
Message: Hello, Vasya!
Мне нужно что бы новые записи появлялись без перезагрузки страницы. То есть если придет Коля и напишет Hello world, что бы Вася и Петя увидели это сообщение без перезагрузки страницы.
Задача такая: Общение между клиентом и сервером-> Клиент говорит Серверу: Я тебя не буду беспокоить, пока у тебя не появятся новые записи. Или наоборот, сервер говорит, я буду отдыхать и не отвечать на твои позывы, пока у меня не появятся новые записи. То есть не грузить сервак каждый раз setInterval - ом без необходимости.
Часть 2.
Поставлю вопрос по другому: Будет ли нормально, если я каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить? Это работает, но меня интересует другое: Насколько это критично? Я тут вспомнил, что MySQL кеширует частые запросы - можно как то съехать на это и использовать вариант с setInterval() и обращаться к серверу каждую секунду? На случай если записей много - есть пагинация. Выводить к примеру не более 10 записей на страницу.
Особенно интересует ответ на вопрос, который описал в блоке под названием "Часть 2" (Добавление)
LIME пишет:
возможно поможет чтение web-sockets(гуглить)
Спасибо ) не сразу увидел добавление
А кто нибудь может ответить по поводу того что я описал в Часть 2 в своем предыдущем посте? Очень интересно...
Похожее делала. Обновление делается после создания записи. Сделал запись, после сразу обновление того, чего нужно. Делала с комментами и с письмами. По началу тоже setinterval использовала.
Я принцип понимаю, но реализацию не очень.
Кто нибудь может предложить вариант использования AJAX для таких задач? Вроде на многих крупных сайтах это реализовано. Так вот, как решить этот вопрос грамотно? Может кто подсказать примером то, как приблизительно это реализуется с минимальной нагрузкой на сервер?
p.innerHTML="Текст, который хотим показать после сворачивания видео";
document.body.appendChild(p);
}
window.onload=function()
{
setTimeout('startVideo()', 3000);
}
Примечание:Тестил в IE 9 и в Хроме. В IE при исчезновении видео страница отображается некорректно, а вот в хроме всё хорошо работает. Дорабатывайте под свои нужды, измените место вывода текста, цвет и т.д если вам нужно...