One2Many Logic Problem - phpMySQL bibliography
| From: | Mike Gifford | Date: | Sun, 22 Jul 2001 23:47:33 +0000 |
| Subject: | One2Many Logic Problem - phpMySQL bibliography | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-59106@lists.php.net to get a copy of this message | ||
Hello,
I'm not sure if anyone else as the need for a php/MySQL based bibliography, but the application that I am developing (which is basically a module for phpSlash) is coming along fairly well. If anyone is interested in seeing the code I can bundle it up and send it out to them (still a long way from finished mind). The draft version of it is up and running here:
http://openconcept.ca/WLP/biblio/index.php3
I'm running into a couple problems though that I don't have the logic language for and I was hoping folks here could help me (as you have done in the past).
The problem is that I've set up a many to many table to ensure that I can have an author be listed as writing many books and a book be written by many authors.
However in listing the books as a bibliography (as the URL above), I want to be able to list multiple authors, and do so in a different format for the first author than for all subsequent ones.
I'm hoping to be able to produce output like this:
Young, D. and N. Dixon. Helping Leaders Take Effective Action: A Program Evaluation. Greensboro, North Carolina: Center for Creative Leadership,
1996.
So, I think the first challenge should be to calculate which books have multiple authors by doing something like this (It's using phplib structures, sorry):
$q2 = "SELECT * FROM WLPbib2profile ORDER BY bibID";
$this->db->query($q2); // Performs above query
while ($this->db->next_record()) {
if ($this->db->Record["bibID"] != $last_bibID) {
echo "<br>" . $this->db->Record["bibID"] . " : " . $this->db->Record["profileID"];
} else { // Multiple Authors
echo ", " . $this->db->Record["profileID"];
$multiple_profileID .= array ($this->db->Record["bibID"] =>
$this->db->Record["profileID"]);
$multiple_profileID .= array($this->db->Record["bibID"] =>
"yes");
}
$last_bibID = $this->db->Record["bibID"];
}
}
With this I can then use the value $multiple_profileID to determine if this record has duplicates or not and use something like this to include both authors and not repeat the bibliography item:
if ($multiple_profileID[$bibID]=="yes") {
while (list($key, $val) = each($multiple_profileID)) {
$written_by = $key . " : " . $val . "<br>";
if ($this->db->Record["firstName"]) {
$written_by .= stripslashes($this->db->Record["firstName"]) . " ";
}
if($this->db->Record["lastName"]) {
$written_by .= stripslashes($this->db->Record["lastName"]);
}
}
} else {
if($this->db->Record["lastName"]) {
$written_by .= stripslashes($this->db->Record["lastName"]) . ", ";
}
if ($this->db->Record["firstName"]) {
$written_by .= stripslashes($this->db->Record["firstName"]);
}
}
But this seems really awkward (at the best of times) and (worst of all) it isn't working.
I've got another related problem in that I've set up the following fields in one table:
firstName
lastName
organization
and I need to be able to order them by a combination of lastName & organization. I could list the organization field simply as the lastName, but that seems like it would be confusing the data types... Must be a way around this.. I suspect it is limited by my logic & not PHP's.
Any ideas would be appreciated.
Mike
--
Mike Gifford, OpenConcept Consulting, http://openconcept.ca
Offering everything your organization needs for an effective web site.
Abolish Nuclear Weapons Now!: http://pgs.ca/petition/
It is a miracle that curiosity survives formal education. - A Einstein