Я пытаюсь выполнить поиск, который будет искать в базе данных либо фамилию, либо имя, а затем возвращать эти значения и выводить их. Я зашел так далеко, но вот где я застреваю, когда есть повторяющаяся запись, такая как имя.
Ex; 2 записи в базе данных имеют то же значение FirstName, что и Bill, и разные значения LastName
Как я могу вернуть все те же имена? Я пробовал несколько решений, но не смог получить его. Я чувствую, что упускаю что-то действительно легкое, но я слепой и не вижу этого.
$query = $handler->query("SELECT * FROM RWApplicants GROUP BY FirstName HAVING COUNT(*) >= 1");
$r = $query->fetch(PDO::FETCH_ASSOC);
if($r){
echo "first";
print_r($r);}
Дает мне только первый ряд, но не остальные
Я пробовал это и различные варианты этого … Надеюсь, кто-нибудь может помочь! Спасибо!
Вы смешиваете библиотеки БД. с помощью ->query()
предполагает, что вы используете PDO или mysqli. Но затем вы пытаетесь получить фактические строки результатов с mysql_fetch_array()
,
Библиотеки «большой тройки» (mysql, mysqli и PDO) НЕ взаимозаменяемы, а дескрипторы соединения / результата из одной библиотеки совершенно бесполезны в других.
Поскольку вы используете pdo / mysqli, вызов mysql_fetch вернет логическое значение FALSE для указания сбоя, а не массив данных.
У вас есть несколько проблем, но я посмотрю, смогу ли я вам чем-то помочь. Возможно, проблема заключается в смешанных методах доступа к БД, но в самом коде есть нерегулярность …
в то время как ($ F = mysql_fetch_array ()) {
$ FirstName = $ result [‘FirstName’];
Вы назначаете «$ f» в качестве итератора, а затем выводите «$»?
Вот более стандартный подход, который должен работать:
$query = $handler->query("SELECT * FROM RWApplicants WHERE FirstName ='$Search'");
$r = $query->fetch();
if($r){
while($f=mysql_fetch_array($r)){
$FirstName =$f['FirstName'];
$LastName=$f['LastName'];
$ID=$f['ID'];
echo "<ul>\n<li>" .$FirstName . " " . $LastName . "</li>\n</ul>";
}
}
Если вы пытаетесь найти повторяющиеся записи FirstName, попробуйте использовать это
("SELECT * FROM RWApplicants GROUP BY FirstName HAVING COUNT(*) > 1")
Попробуйте это, если хотите получить все строки с дубликатом FirstName
("SELECT * FROM RWApplicants WHERE FirstName IN(SELECT FirstName FROM RWApplicants GROUP BY FirstName HAVING count(*) > 1)");