Kod jest przeznaczony dla witryny docuindex.net
muszę dodać wiele kategorii dla jednejdokument, i nie jestem pewien, jak to zrobić. Na przykład po kliknięciu kategorii Przyroda zobaczysz dokument x, a jeśli klikniesz na kategorię naukową, zobaczysz dokument x, jeśli należy on do obu z nich
<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!=""){
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"])).""";}
if(isset($_GET["cat2"]) && $_GET["cat2"]!=""){
$subQ = " WHERE Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";}
?>
<a href="?cat=nature">Nature</a>
<a href="?cat2=science">Science</a>
to powinno być coś w rodzaju
<a href="?cat=nature or cat2=nature">Nature</a>
<a href="?cat=scinece or cat2=science">Science</a>
Byłoby wspaniale, gdyby ktoś mógł pomóc
DZIĘKUJĘ WSZYSTKIM, zwłaszcza Samowi Sullivanowi! brakowało:
<a href="?cat=scinece&cat2=science">Science</a>
i zrób to dla każdej kategorii <a href="?cat=nature&cat2=nature">Nature</a>
etc etc (w głównym poście napisałem OR zamiast AND). W ten sposób mogę dodać wiele głównych kategorii i podkategorii do tego samego dokumentu.
Odpowiedzi:
0 dla odpowiedzi № 1Nie jestem pewien, ale myślę, że szukasz MySQL OR
.
<?php
$subQ = "WHERE";
if(!empty($_GET["cat"])) {
$category = mysql_real_escape_string(str_replace("_"," ",$_GET["cat"]));
$subQ .= " Category="category" OR";
}
if(!empty($_GET["cat2"])) {
$category = mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"]));
$subQ .= " Category="category" OR";
}
if($subQ == "WHERE") $subQ = "";
$subQ = substr($subQ, 0, -3); // remove trailing OR
?>
<a href="?cat=nature&cat2=science">Nature OR Science</a>
Jeśli chcesz, żeby to była natura i Nauka, możesz ustawić OR
s do AND
si zmodyfikuj ostatnią funkcję na substr($subQ, 0, -4);
aby usunąć dodatkowy znak.
0 dla odpowiedzi nr 2
Spróbuj tego:
<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!="")
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"]))."" OR Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";
?>
0 dla odpowiedzi № 3
Możesz zmodyfikować kod jak poniżej:
<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!=""){
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"])).""";}
if(isset($_GET["cat2"]) && $_GET["cat2"]!=""){
$subQ .= " and Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";}
?>
0 dla odpowiedzi nr 4
Aby zrobić to dobrze, "chcesz stworzyć relację wiele do wielu między kategoriami a filmami dokumentalnymi. Aby to zrobić, kategoria nie powinna już być polem w documentary
table (zakładam, że tak się nazywa). Zamiast tego utworzysz dwie nowe tabele, a category
tabela zawierająca dwa pola, identyfikator kategorii i nazwę. Druga tabela to plik documentary_to_category
tabela z dwoma polami, identyfikatorem dokumentu i identyfikatorem kategorii. Identyfikator dokumentu i identyfikator kategorii są obcymi kluczami odpowiednio do pliku documentary.id i category.id.
Teraz musiałbyś przepisać zapytanie do czegoś podobnego do następującego:
$categories = array();
foreach ($_GET["category"] as $categoryId) {
if (ctype_digit($categoryId)) {
$categories[] = $categoryId;
}
}
$sql = "SELECT d.id, d.name, category_id
FROM documentary d
JOIN documentary_to_category dtc
ON dtc.documentary_id = d.id
WHERE dtc.category_id IN(" . implode(",", $categories) . ")
GROUP BY d.id
HAVING COUNT(DISTINCT category_id) = " . count($categories);
Teraz Twoje linki będą wyglądać mniej więcej tak:
<a href="?category[]=1&category[]=2">Nature and Science</a>
poniżej zamieściłem graficzne przedstawienie dwóch nowych tabel:
-----------------------------------------
| category |
------------------------------------------
| id | name |
------------------------------------------
| 1 | Science |
| 2 | Nature |
| 3 | ... |
------------------------------------------
-----------------------------------------
| documentary_to_category |
-----------------------------------------
| documentary_id | category_id |
-----------------------------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| ... | ... |
-----------------------------------------