08. juli 2004 - 11:53Der er
27 kommentarer og 1 løsning
Problemer med løkker
Okay, here we go.
Jeg har to løkker, den første skal kun bruges til at finde id'er på mine produkter, den anden checker om der er listet priser til de enkelte produkter. Den kommer ikke med noget output, har checket og kan se den går i stå efter den første løkke. Hvis jeg ændre den sidste løkke, så den kun checker om $no er sat, så "virker" det. Problemet er at der kun skal komme ét output for hvert produkt, ellers bliver min tabel opretter for hvert produkt (hvilken ikke er meningen).
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) { $no++;
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if(($doublecheck3 != 0) && ($no)) {
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Woops, den sidste linie i den sidste løkke skal se sådan ud: if(($doublecheck3 != 0) && ($no == 1)) {
(stadig samme problem, kom bare til at poste mens jeg testede)
rettet: -------------- $query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) { $no++;
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if(($doublecheck3 != 0) && ($no == 1)) {
Jeg kan ikke anvende GROUP BY, da jeg skal sortere efter series-navne, disse felter består af tal/id'er (serierne er i en anden tabel). Jeg har en query før de to jeg har postet (samt en masse andre), der checker alle series (row2[id]) og sortere efter navn. Tror ikke det kan laves meget anderledes end ovenfor, men du er da velkommen til at tage et kig (se kilden): http://www.tackleprices.com/tackleprices.txt
Hvad er det for et felt, fra hvilken database du vil have output fra? For når du søger efter om $no == 1 - ja, det vil den jo kun være 1 gang og derfor kun 1 output... Næste gang løkken kører, vil $no være 2. Evt. paste et par linier endnu.
Jeg ville faktisk også gerne have et link til hvor koden er i action, hvis jeg må det? For lige at forstå hvad det er den tager flere gange og sådan...
Jeg vil kun have 1 tabel for hvert produkt, men tabellen skal kun laves hvis der er tilføjet series, produkter og priser - selve rækkerne med serierne bliver postet længere nede (I selve tabellen). Det virkede i går, men jeg har lavet et eller andet, så det ikke virker mere.
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) { $no++;
Overstående løkke: Her finder vi ALLE produkter, der er knyttet til den forrige løkke (serie løkken).
Understående løkke: Her checker vi kun om der er en pris knyttet til produktet, hvis ja så laver vi tabellen. Vi er ligeglade med produkterne, da det er serierne vi skal have listet (men kun hvis der er knyttet produkter (og igen priser til produkterne) til serierne).
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if(($doublecheck3 != 0) && ($no == 1)) {
Det var jo ærgerligt... :/ Hvis det kan hjælpe dig, har jeg kildekoden fra den fil du pastede et par kommentarer oppe åbne, hvis det svarer til det du har overskrevet?
Jeg lavede fejlen i nat, roede lidt for meget rundt i det - sådan går det når man er lidt søvnig :/
Ser dog ikke ud til der er sket den store skade. Hvis jeg fjerne $no, så laver den en ny tabel for hvert produkt, i stedet for brand - det burde være mere "simplet" at løse. Linket er opdateret: http://www.tackleprices.com/tackleprices.txt
Grunden til at den laver en tabel for hvert produkt er den første løkke (af de to postet nedenunder). Den første checker alle produkter, herefter checker den om der er tilføjet en pris til produktet, hvis ja så oprettes en tabel. Dette er forkert, da der kun skal oprettes én tabel for hvert brand - kan ikke se nogen fejl, sammenligned med den tidligere kode. Dengang løste jeg problemet med $no
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) {
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if($doublecheck3 != 0) {
Jeg har lidt svært ved at overskue det, men har da et par foreslag.
1. Kan ikke se, at dit $no ikke skulle virke
2. $query = mysql_query("SELECT * FROM brand WHERE status='1' AND validation_status='1' GROUP BY brand") or die (mysql_error());
3. $q = mysql_query("SELECT brand.*, series.*, products.*, prices.* FROM brand, series, products, prices WHERE brand.status = '1' AND series.brand_id = brand.id AND series.type = 'Reels' AND series.validation_status = '1' AND products.series_id = series.id AND products.series_type = 'Reels' AND products.validation_status = '1' AND prices.product_id = products.id");
while($row = mysql_fetch_array($q)) { //table }
Den sidste ved jeg ikke, for jeg ved ikke om man kan tage så meget på een gang :)
Men du har det ikke oploadet? Så man kan se det i action ved siden af kun at have kildekoden?
problemet ligger her, uden $no kører den løkken igennem for hvert produkt, hvilket resulterer i en tabel for hvert produkt (i stedet for brand):
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) {
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if($doublecheck3 != 0) {
Har prøvet at anvende last_product, men det virker heller ikke. Den kommer ikke med en fejl, men den opretter stadig en ny tabel for hvergang der er et produkt i db'en.
$last_product = ""; $query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error()); while($row3 = mysql_fetch_array($query3)) {
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error()); $doublecheck3 = mysql_num_rows($sql_doublecheck3); if(($doublecheck3 != 0) && ($last_product != $row2[id])) {
Jeg kan ikke overskue alle dine query's. Det bliver jeg nødt til at indrømme :/ Medmindre jeg får et dump eller noget af databasen så jeg kan sætte det op og teste selv her, så kan jeg nok ikke gøre meget mere end bare at fortsætte forvirringen... Kan ikke lige se om det er den ene eller anden løkke der gør at den kører videre...
hehe, godt jeg ikke gik i seng. Har lige fixet det (har ikke set nogle fejl endnu). Puhaaa, tror jeg smutter i seng - har snart brugt et døgn på den side :P
Godnat. Du får point for den tid du har brugt på mig :)
Takker
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.