Приветствую. Столкнулся с задачей и пока даже и не знаю в какую сторону копать. Может кто-то уже сталкивался с подобной задачей? и так, есть одна таблица: ID, lastName, name, midlName, refID (ну и ещё всякое, что сейчас не важно) где ID, это auto_increment, Ф,И,О - столбцы VARCHAR(24) и refID, это уникальный ID кого-то из этой же таблицы. SELECT*FROM`users` выглядит примерно так: 1 | Превед | Первый | Нах | 1 2 | Сидоров | Иван | Петрович | 1 4 | Иванов | Пётр | Сидорович | 2 15 | Пупкин | Василий | Батькович | 4 а очень хочется вывести в браузер вместе с refID и соответствующее ему ФИО есть ли способ не загонять запросы в цикл?
Три раза перечитал, не понял что тебе нужно. Надо как то переформулировать наверно что ты хочешь. И если у тебя все хранится в одной таблице, это уже через задницу =) Одну строку с данными покажи хоть из таблицы.
Можно так: Код (Text): SELECT u1.*, u2.lastName as refLastName, u2.name as refName, u2.midlName as refMidlName FROM users as u1 JOIN users as u2 ON(u2.id = u1.refID) HAVING u1.id = 4
Без HAVING не сработает а JOIN или JOIN LEFT в данном случае роли не играет. Связь - 1:1 В конце концов вариантов куча - можете озвучить свой.
Попробуйте не флудить и не предлагать ерунды. Если Вы хотите в ключевом атрибуте хранить NULL - это Ваше право. ТС не просит переделывать его таблицу и БД. Я так и не увидел Ваш вариант.
@Maputo, не нравится NULL, ваше право, но остаётся несуществующий рефер, ситуация вполне себе стандартная, но вы почему-то акцентировали внимание именно на NULL, который я предложил лишь для примера, как все возможные варианты, что бы продемонстрировать как изменится результат выборки. Свой вариант я предложил в своём первом посте, взять ваш вариант, убрать HAVING и добавить LEFT.
Нет. У ТСа четко выделена первая запись, как корневая. Наверняка ее id идет как значение по-умолчанию. Гадать бессмысленно. Но нуль лечится. Оформите, пожалуйста, в SQL-формате. Тут есть подводные камни. Хочется видеть все целиком.
@Maputo, странный вы человек, словосочетание "гадать бессмысленно" сразу после слова "наверняка" Никаких подводных камней тут нет, доберусь до компьютера напишу вам запрос. Со смартфона ужасно не удобно это делать.
Код (Text): SELECT u1.*, u2.lastName as refLastName, u2.name as refName, u2.midlName as refMidlName FROM users as u1 LEFT JOIN users as u2 ON(u2.id = u1.refID)
@Maputo, вы продолжаете гадать, что нужно, а что нет. ТС попросил без цикла вывести рядом с refID соответствующие этому идентификатору записи. И точка
@Maputo, действительно про эту петлю ничего не сказано. Ну можно добавить условие ID!=refID, только на каком основании? --- Добавлено --- И вот это тоже весьма сомнительное утверждение, сорри.
Приветствую. Большое спасибо за ваши отзывы. Пока прочитал наискосок и считаю, что действительно нужно дать пояснения, чтобы избежать разночтений. ID пользователя, это уникальное значение, подставляемое самой БД. пользователи из таблицы исчезать не будут, т.е. никакие строки не удаляются, вместо этого я добавил `active` BOOL DEFAULT `1` и при необходимости просто "отключаю" строки, как раз для того, чтобы ни один refID не ссылался на несуществующую строку, впрочем для refID я на всякий случай указал DEFAULT `1` и теперь даже, если запись заводилась через гондурас, никаких NULL в таблице образоваться не может и да, задача в том, чтобы прочитать всю таблицу в массив и, разобрав в цикле, построчно показать записи, с ссылкой типа echo '<a href="'.$_SERVER['PHP_SELF'].'?refid='.$refid.'">'.$refname.'</a>';